在Python中,如果給定一個list或tuple,我們可以通過for循環來遍歷這個list或tuple,這種遍歷我們成為迭代(Iteration)。
在Python當中的迭代是很抽象的,它與java不同,它是通過for..in來實現的:
for (i=0; i<list.length; i++) { n = list[i]; }
這個是java代碼。
>>> for i in range(1,101): if i % 7 ==0: print (i) 7 14 21 28 35 42 49 56 63 70 77 84 91 98
這個是python當中的迭代。
可見在Python的迭代當中省略了很多的東西。
因為 Python 的 for循環不僅可以用在list或tuple上,還可以作用在其他任何可迭代對象上。
因此,迭代操作就是對於一個集合,無論該集合是有序還是無序,我們用 for 循環總是可以依次取出集合的每一個元素。
我們現在已經知道的集合有:
有序的:list,tuple,str和unicode
無序的是:set
無序集合並且有key-value對:Dict
Python中,迭代永遠是取出元素本身,而非元素的索引。
對於有序的集合我們有的時候確實會出現想要迭代出索引好的情況,這個時候便需要一個特殊的函數來解決問題了。
這個函數就是enumerate()函數:
>>> L = ['Adam','Paul','Lisa','Dean'] >>> for index, name in enumerate(L): print (index,":",name) 0 : Adam 1 : Paul 2 : Lisa 3 : Dean
這里的迭代索引號並非是真的迭代索引號,而是函數把L變成一個tuple來進行迭代。
也就是把:
['Adam','Paul','Lisa','Dean']
變成了類似於:
([0,'Adam'],[1,'Paul'],[2,'Lisa'],[3,'Dean'])
因此我們迭代的每一個元素其實是一個tuple
只是這樣寫就簡化了寫法。
我們知道迭代是一種for的循環,但是在dict當中呢我們擁有key-value這樣的對。我們在迭代value的時候就需要用到key。
不過我們的python提供了一個value的方法:來簡化這種方式:
>>> d = {'Dean':95,'Sam':97} >>> print (d.values()) dict_values([97, 95]) >>> for l in d.values(): print (l) 97 95
其實我們從上面的輸出結果可以看到我們的values函數其實是把我們的dict變成了list來進行索引的。(這個是2.0的說法,在3.0的版本當中已經不是list了,而是view,包括keys(),items()函數都不是list,而是view)
在python的函數使用手冊上面還擁有一種itervalues()的方法(這個是2.0的手冊,在3.0的版本當中呢已經不存在itervalue()這個函數了,包括iterkeys()等都被刪除了)
如果一個對象說自己可迭代,那我們就直接用 for 循環去迭代它,可見,迭代是一種抽象的數據操作,它不對迭代對象內部的數據有任何要求。
在python當中,如果我們需要同時迭代key和value我們需要用到items()函數。
>>> d = {'Dean':95,'Sam':97} >>> for key,value in d.items(): print (key,':',value) Sam : 97 Dean : 95