python之迭代


在Python中,如果給定一個listtuple,我們可以通過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

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM