python中,迭代永遠是取出元素本身,而非元素的索引。
對於有序集合,元素確實是有索引的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?
方法是使用enumerate() 函式:
>>> l = ['adam', 'lisa', 'bart', 'paul']使用 enumerate() 函式,我們可以在for迴圈中同時繫結索引index和元素name。但是,這不是 enumerate() 的特殊語法。實際上,enumerate() 函式把:>>> for index, name in enumerate(l):
... print index, '-', name
...
0 - adam
1 - lisa
2 - bart
3 - paul
['adam', 'lisa', 'bart', 'paul']變成了類似:
[(0, 'adam'), (1, 'lisa'), (2, 'bart'), (3, 'paul')]因此,迭代的每乙個元素實際上是乙個tuple:
for t in enumerate(l):如果我們知道每個tuple元素都包含兩個元素,for迴圈又可以進一步簡寫為:index = t[0]
name = t[1]
print index, '-', name
for index, name in enumerate(l):這樣不但**更簡單,而且還少了兩條賦值語句。print index, '-', name
可見,索引迭代也不是真的按索引訪問,而是由 enumerate() 函式自動把每個元素變成 (index, element) 這樣的tuple,再迭代,就同時獲得了索引和元素本身。
zip()函式可以把兩個 list 變成乙個 list:
>>> zip([10, 20, 30], ['a', 'b', 'c'])在迭代 ['adam', 'lisa', 'bart', 'paul'] 時,如果我們想列印出名次 - 名字(名次從1開始),請考慮如何在迭代中列印出來。[(10, 'a'), (20, 'b'), (30, 'c')]
?不會了怎麼辦
range(1, ?) 可以建立出起始為 1 的數列。
參考**:
l = ['adam', 'lisa', 'bart', 'paul']for index, name in zip(range(1, len(l)+1), l):
print index, '-', name
9 2迭代器和迭代器範圍
vector和deque的迭代器間的減法操作 iter1 iter2 操作結果是兩個迭代器間的距離,difference type型別,可直接cout輸出。注意 只適用於vector和deque。同樣,迭代器加或減整數值n,也只適用於vector和deque。但是這兩個容器的迭代器間是否有 和 操作...
Python 索引迭代
1 使用enumerate函式 l adam lisa bart paul for index name inenumerate l print index 1 name lower 2 使用zip函式 for index name inzip range 1 len l 1 l print ind...
C 9 2迭代器支援的運算和迭代器範圍
每種容器型別都提供若干共同工作的迭代器型別,與容器型別一樣,所有迭代器具有相同的介面 如果某種迭代器支援某種操作,那麼支援這種操作的其他迭代器會以相同的方式支援這種操作。例如 所有容器迭代器都支援以解引用運算從容器中讀入乙個元素。類似的,容器都提供自增和自減操作符來支援從乙個元素到下乙個元素的訪問。...