for i in … 迴圈的用法
在常見的程式語言中,要進行重複性的,或是對列表做一些搜索過濾整個資料的動作,都會需要用迴圈for loop 這個語法。例如重複三遍的輸出Hello world:
print("Hello world")
print("Hello world")
print("Hello world")
會直接寫成
for i in range(3):
print("Hello world")
從上面的範例可知,利用for迴圈可以直接指定反覆執行的程式的次數,而不需要重複貼上程式碼。這樣能增加程式的可維護性和可讀性。在Python中,for這個保留字會搭配in這個保留字使用,冒號後縮排的內容就是迴圈的內部區塊,再舉一個例子:走訪一個[‘a’,’b’,’c’]這樣的列表:
x = ['a','b','c']
for xi in x:
print(xi)
則會得到
a
b
c
range函式
如果想要類似C語言的風格,使用到索引值的話可以搭配range函數,它具有可迭代的(iterable)的性質:
range(start, stop, step)
其中參start為起始值
stop為終值
step為本次和上次的間格值
stop一定要有,start和step可有可無
來產生索引值。
len函式
以及長度計算的len函數取得列表長度:
len(sequence)
上述例子就會變成
x = ['a','b','c']
for i in range (len(x)):
print(x[i])
這裡的作法和上述最大差異在於,原本in的對象是x,所以每一次迭代拿到的值就是列表在該位置的內容,而這裡迭代的對象變成range函數每次迭代取的值,也就是索引號(0,1,2…n-1) 本身,所以變數i的內容是索引值。而range (len(x))則是把len(x)得到的x的長度傳遞給range函數而已。因此可以搭配列表的存取以x[i]的形式取值。如果初學不熟悉iterable的意思沒關係,可以先習得上面兩種慣用法即可。
通常大多數場合只需要依序用迴圈存取列表的值出來處理,請使用第一種方式比較簡潔明瞭。但如果是需要使用類似i+1,i-1這種動用到索引取前後關係的計算,會比較適合用第二種方式,程式寫起來會比較能對應到數學公式,對於後續維護程式會比較方便。此外,如果想要直接用iterable的特性,但又同時需要索引值可以用enumerate函數:
enumerate(sequence, start=0)
其中參數sequence為可迭代物件,start為起始值(可不傳遞)
上述例子改為:
x = ['a','b','c']
print("i","xi")
for i , xi in enumerate(x):
print(i,xi)
輸出為:
i xi
0 a
1 b
2 c
有時後,我們會需要同時遍歷一組列表,這時候可以用zip函數打包起來,變成元組(tuple),而全部會變成由元組組成的列表,再同時遍歷後解包,例如:
x =['a','b','c']
y= ['x','y','z']
for x,y in zip(x,y):
print(x,y)
則會得到
a x
b y
c z
以上就是for迴圈與相關的函數一起使用的方式。
本文允許重製、散布、傳輸以及修改,但不得為商業目的之使用
使用時必須註明出處自:楊明翰 , 台灣人工智慧與資料科學研究室 https://aistudio.tw