日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代

發(fā)布時(shí)間:2023/12/13 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

序列上索引值迭代

問(wèn)題

你想在迭代一個(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

為了按傳統(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

這種情況在你遍歷文件時(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 linewords = [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ì)。

討論

當(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): ...

總結(jié)

以上是生活随笔為你收集整理的《Python Cookbook 3rd》笔记(4.10):序列上索引值迭代的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。