2024-08-07|閱讀時間 ‧ 約 8 分鐘

Python 的 for ... loop 迴圈迭代語法

在循環式的流程控制中,最常用的就是for loop 或是 while loop 語法了。

最常見的場景就是根據條件判斷式,重複執行特定的指令。

如果要在python寫出類似C/C++ for loop,可以怎麼寫呢?


透過索引去進行迭代

for var in range( start=0, stop, step=1 ):


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, 

透過元素去進行迭代

for var in iterable可迭代對象:


另一個比較方便的形式,就是直接迭代一個序列依序拜訪每個元素

像是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,可以嗎?

可以喔!

同時透過索引和元素去迭代

for index, elem in enumerate(iterable可迭代對象):


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)


Reference

[1] 4. More Control Flow Tools — Python 3.12.4 documentation

分享至
成為作者繼續創作的動力吧!
© 2024 vocus All rights reserved.