python同時(shí)遍歷數(shù)組的索引和值的實(shí)例
你想在迭代一個(gè)序列的同時(shí)跟蹤正在被處理的元素索引。
獲取索引
內(nèi)置的 enumerate() 函數(shù)可以很好的解決這個(gè)問(wèn)題:
>>> my_list = ['a', 'b', 'c'] >>> for idx, val in enumerate(my_list): ... print(idx, val) ... 0 a 1 b 2 c
行號(hào)從1開(kāi)始
為了按傳統(tǒng)行號(hào)輸出(行號(hào)從1開(kāi)始),你可以傳遞一個(gè)開(kāi)始參數(shù):
>>> my_list = ['a', 'b', 'c'] >>> for idx, val in enumerate(my_list, 1): ... print(idx, val) ... 1 a 2 b 3 c
行號(hào)定位
這種情況在你遍歷文件時(shí)想在錯(cuò)誤消息中使用行號(hào)定位時(shí)候非常有用:
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() 對(duì)于跟蹤某些值在列表中出現(xiàn)的位置是很有用的。 所以,如果你想將一個(gè)文件中出現(xiàn)的單詞映射到它出現(xiàn)的行號(hào)上去,可以很容易的利用 enumerate() 來(lái)完成:
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].append(idx)
如果你處理完文件后打印 word_summary ,會(huì)發(fā)現(xiàn)它是一個(gè)字典(準(zhǔn)確來(lái)講是一個(gè) defaultdict ), 對(duì)于每個(gè)單詞有一個(gè) key ,每個(gè) key 對(duì)應(yīng)的值是一個(gè)由這個(gè)單詞出現(xiàn)的行號(hào)組成的列表。 如果某個(gè)單詞在一行中出現(xiàn)過(guò)兩次,那么這個(gè)行號(hào)也會(huì)出現(xiàn)兩次, 同時(shí)也可以作為文本的一個(gè)簡(jiǎn)單統(tǒng)計(jì)。
計(jì)數(shù)變量
當(dāng)你想額外定義一個(gè)計(jì)數(shù)變量的時(shí)候,使用 enumerate() 函數(shù)會(huì)更加簡(jiǎn)單。你可能會(huì)像下面這樣寫代碼:
lineno = 1 for line in f: # Process line ... lineno += 1
但是如果使用 enumerate() 函數(shù)來(lái)代替就顯得更加優(yōu)雅了:
for lineno, line in enumerate(f): # Process line ...
enumerate() 函數(shù)返回的是一個(gè) enumerate 對(duì)象實(shí)例, 它是一個(gè)迭代器,返回連續(xù)的包含一個(gè)計(jì)數(shù)和一個(gè)值的元組, 元組中的值通過(guò)在傳入序列上調(diào)用 next() 返回。
陷阱
還有一點(diǎn)可能并不很重要,但是也值得注意, 有時(shí)候當(dāng)你在一個(gè)已經(jīng)解壓后的元組序列上使用 enumerate() 函數(shù)時(shí)很容易調(diào)入陷阱。 你得像下面正確的方式這樣寫:
data = [ (1, 2), (3, 4), (5, 6), (7, 8) ] # Correct! for n, (x, y) in enumerate(data): ... # Error! for n, x, y in enumerate(data): ...
參考:
https://docs.python.org/2/library/functions.html#enumerate
以上這篇python同時(shí)遍歷數(shù)組的索引和值的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法分析
這篇文章主要介紹了Python3實(shí)現(xiàn)對(duì)列表按元組指定列進(jìn)行排序的方法,結(jié)合實(shí)例形式分析了Python3針對(duì)列表排序的常見(jiàn)操作技巧與注意事項(xiàng),需要的朋友可以參考下2018-12-12Gradio機(jī)器學(xué)習(xí)模型快速部署工具接口狀態(tài)
這篇文章主要為大家介紹了Gradio機(jī)器學(xué)習(xí)模型快速部署工具接口狀態(tài)的原文翻譯,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-04-04關(guān)于Python包導(dǎo)入報(bào)錯(cuò)的問(wèn)題總結(jié)
這篇文章主要介紹了關(guān)于Python包導(dǎo)入報(bào)錯(cuò)的問(wèn)題總結(jié),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式
這篇文章主要介紹了python如何標(biāo)準(zhǔn)化日期時(shí)間格式轉(zhuǎn)化成非標(biāo)準(zhǔn)化格式問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-06-06Python爬蟲(chóng)之Selenium鼠標(biāo)事件的實(shí)現(xiàn)
這篇文章主要介紹了Python爬蟲(chóng)之Selenium鼠標(biāo)事件的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12Python list運(yùn)算操作代碼實(shí)例解析
這篇文章主要介紹了Python list運(yùn)算操作代碼實(shí)例解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01爬蟲(chóng)代理池Python3WebSpider源代碼測(cè)試過(guò)程解析
這篇文章主要介紹了爬蟲(chóng)代理池Python3WebSpider源代碼測(cè)試過(guò)程解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12