你想在迭代乙個序列的同時跟蹤正在被處理的元素索引。
內建的 enumerate() 函式可以很好的解決這個問題:
>>
> my_list =
['a'
,'b'
,'c'
]>>
>
for idx, val in
enumerate
(my_list):.
..print
(idx, val)..
.0 a
1 b2 c
為了按傳統行號輸出 (行號從 1 開始),你可以傳遞乙個開始引數:
>>
> my_list =
['a'
,'b'
,'c'
]>>
>
for idx, val in
enumerate
(my_list,1)
:...
print
(idx, val)..
.1 a
2 b3 c
這種情況在你遍歷檔案時想在錯誤訊息中使用行號定位時候非常有用:
def
parse_data
(filename)
:with
open
(filename,
'rt'
)as f:
for lineno, line in
enumerate
(f,1):
fields = line.split(
)try
: count =
int(fields[1]
)...
except valueerror as e:
print
('line {}: parse error: {}'
.format
(lineno, e)
)
enumerate() 對於跟蹤某些值在列表**現的位置是很有用的。所以,如果你想將
乙個檔案**現的單詞對映到它出現的行號上去,可以很容易的利用 enumerate() 來
完成:
word_summary = defaultdict(
list
)with
open
('myfile.txt'
,'r'
)as f:
lines = f.readlines(
)for idx, line in
enumerate
(lines)
:# create a list of words in current line
words =
[w.strip(
).lower(
)for w in line.split()]
for word in words:
word_summary[word]
如果你處理完檔案後列印 word summary ,會發現它是乙個字典 (準確來講是乙個
defaultdict ),對於每個單詞有乙個 key ,每個 key 對應的值是乙個由這個單詞出現
的行號組成的列表。如果某個單詞在一行**現過兩次,那麼這個行號也會出現兩次,
同時也可以作為文字的乙個簡單統計。
當你想額外定義乙個計數變數的時候,使用 enumerate() 函式會更加簡單。你可
能會像下面這樣寫**:
lineno =
1for line in f:
# process line..
. lineno +=
1
但是如果使用 enumerate() 函式來代替就顯得更加優雅了:
for lineno, line in
enumerate
(f):
# process line..
.
enumerate() 函式返回的是乙個 enumerate 物件例項,它是乙個迭代器,返回連續的包含乙個計數和乙個值的元組,元組中的值通過在傳入序列上呼叫 next() 返回。
還有一點可能並不很重要,但是也值得注意,有時候當你在乙個已經解壓後的元組序列上使用 enumerate() 函式時很容易調入陷阱。你得像下面正確的方式這樣寫:
data =[(
1,2)
,(3,
4),(
5,6)
,(7,
8)]# correct!
for n,
(x, y)
inenumerate
(data):.
..# error!
for n, x, y in
enumerate
(data):.
..
9 2 索引迭代
python中,迭代永遠是取出元素本身,而非元素的索引。對於有序集合,元素確實是有索引的。有的時候,我們確實想在 for 迴圈中拿到索引,怎麼辦?方法是使用enumerate 函式 l adam lisa bart paul for index,name in enumerate l print i...
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...
fibnacci序列(迭代)
程式的版權和版本宣告部分 檔名稱 fibnacci.cpp 作 者 霍雨佳 完成日期 2013年 11 月 22 日 版本號 v1.0 輸入描述 無 問題描述 設計遞迴函式,求出並輸出fibnacci序列的第20個數,fibnacci序列形如0,1,1,2,3,5,8.程式輸出 fibnacci序列...