在循環式的流程控制中,最常用的就是for loop 或是 while loop 語法了。
最常見的場景就是根據條件判斷式,重複執行特定的指令。
如果要在python寫出類似C/C++ for loop,可以怎麼寫呢?
var 代表迴圈變數,對應到虛擬碼或者程式碼中的i, j, k, ...等等
range 是代表區間的起始位置,和每次迭代的前進步伐。
start 起點默認是0, step 前進步伐默認是+1
stop終點需要使用者明確指定
另外,要特別注意的是, python 的區間通常都是包含起點,不包含終點。
範例,如果我們要印出0~9中的整數,可以這樣寫
for i in range(0, 10, 1):
print(i, end=", ")
對應的輸出就是
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
如同剛剛提到的,start 默認是0, step 默認是+1,所以可以省略。
在range裡面指定終點stop即可
for i in range(10):
print(i, end=", ")
對應的輸出同樣是
0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
再舉一個進階一點的例子,如果要印出0~10中的偶數,可以這樣寫
for i in range(0, 11, +2):
print(i, end=", ")
要特別注意,由於range區間不包含終點,所以終點記得寫下一個比較大的數字11
對應的輸出就是
0, 2, 4, 6, 8, 10,
另外是一個類似的例子,如果要印出0~10中的奇數,可以這樣寫
for i in range(1, 11, +2):
print(i, end=", ")
對應的輸出就是
1, 3, 5, 7, 9,
透過索引去拜訪序列元素
例如,透過索引去拜訪陣列元素可以這樣寫
arr = [100, 200, 300, 400, 500]
for i in range( len(arr) ):
print( arr[i], end=', ')
對應的輸出就是
100, 200, 300, 400, 500,
另一個比較方便的形式,就是直接迭代一個序列,依序拜訪每個元素。
像是string字串、list列表、tuple元祖...等等這些都是可迭代對象
如果要依序印出字串中的每個字元,可以這樣寫
s = "Hello world"
for char in s:
print(char, end=", ")
對應的輸出就是
H, e, l, l, o, , w, o, r, l, d,
唯一要特別注意的是,這邊的char相當於一個read only的變數,僅供輸出,
如果修改char對於原本的序列是不會產生任何作用。
s = "Hello world"
for char in s:
# 轉大寫
char = char.upper()
print(char, end=", ")
print(f"\n s still unchange: {s}")
對應的輸出就是
H, E, L, L, O, , W, O, R, L, D,
s still unchange: Hello world
如果,要依序印出陣列中的每個元素,可以這樣寫
arr = [100, 200, 300, 400, 500]
for num in arr:
print(num, end=", ")
對應的輸出就是
100, 200, 300, 400, 500,
同樣的道理,這邊的num相當於一個read only的變數,僅供輸出,
如果修改num對於原本的序列是不會產生任何作用。
arr = [100, 200, 300, 400, 500]
for num in arr:
num = num + 50
print(num, end=", ")
print(f"\n arr still unchange: {arr}")
對應的輸出就是
150, 250, 350, 450, 550,
arr still unchange: [100, 200, 300, 400, 500]
如果同時想取得索引index和元素element,可以嗎?
可以喔!
python提供進階的enumerate枚舉語法,可以返回索引index和元素element。
提供使用者更便捷的迭代語法。
index代表迭代的索引值,沒有特別指定的話,默認從0開始數
elem代表迭代的元素
要依序印出陣列中的每個索引和元素,可以這樣寫
arr = [100, 200, 300, 400, 500]
for idx, elem in enumerate(arr):
print(f"index = {idx}, element = {elem}")
對應的輸出就是
index = 0, element = 100
index = 1, element = 200
index = 2, element = 300
index = 3, element = 400
index = 4, element = 500
比較特殊的是,enumerate允許使用者指定索引編號的起點。
例如,我們想要index從一開始數,這樣比較直覺,也貼近人的習慣和觀點。
依序印出陣列中的每個索引和元素,索引從1開始數,可以這樣寫
arr = [100, 200, 300, 400, 500]
for idx, elem in enumerate(arr, 1):
print(f"index = {idx}, element = {elem}")
對應的輸出就是
index = 1, element = 100
index = 2, element = 200
index = 3, element = 300
index = 4, element = 400
index = 5, element = 500
到這邊已經學會基本與常用的python for ... loop 語法!
語法很簡潔也很直覺,對吧!
有空記得和array陣列操作一起複習喔,效果加倍
Python 陣列 與 List comprehension 列表推導式 | 小松鼠的演算法樂園 (vocus.cc)
[1] 4. More Control Flow Tools — Python 3.12.4 documentation