Python中您旁,迭代永遠(yuǎn)是取出元素本身,而非元素的索引轴捎。
對于有序集合鹤盒,元素確實是有索引的。有的時候侦副,我們確實想在 for 循環(huán)中拿到索引侦锯,怎么辦?
方法是使用 enumerate() 函數(shù):
>>> L = ['Adam', 'Lisa', 'Bart', 'Paul']
>>> for index, name in enumerate(L):
... print index, '-', name
...
0 - Adam
1 - Lisa
2 - Bart
3 - Paul
使用 enumerate() 函數(shù)秦驯,我們可以在for循環(huán)中同時綁定索引index和元素name尺碰。但是,這不是 enumerate() 的特殊語法译隘。實際上亲桥,enumerate() 函數(shù)把:
['Adam', 'Lisa', 'Bart', 'Paul']
變成了類似:
[(0, 'Adam'), (1, 'Lisa'), (2, 'Bart'), (3, 'Paul')]
因此,迭代的每一個元素實際上是一個tuple:
for t in enumerate(L):
index = t[0]
name = t[1]
print index, '-', name
如果我們知道每個tuple元素都包含兩個元素固耘,for循環(huán)又可以進(jìn)一步簡寫為:
for index, name in enumerate(L):
print index, '-', name
這樣不但代碼更簡單题篷,而且還少了兩條賦值語句。
可見厅目,索引迭代也不是真的按索引訪問番枚,而是由 enumerate() 函數(shù)自動把每個元素變成 (index, element) 這樣的tuple,再迭代损敷,就同時獲得了索引和元素本身葫笼。
任務(wù)
zip()函數(shù)可以把兩個 list 變成一個 list:
>>> zip([10, 20, 30], ['A', 'B', 'C'])
[(10, 'A'), (20, 'B'), (30, 'C')]
在迭代 ['Adam', 'Lisa', 'Bart', 'Paul'] 時,如果我們想打印出名次 - 名字(名次從1開始)拗馒,請考慮如何在迭代中打印出來路星。
提示:考慮使用zip()函數(shù)和range()函數(shù)