溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

python如何同時(shí)遍歷數(shù)組的索引和值

發(fā)布時(shí)間:2021-07-23 14:15:15 來源:億速云 閱讀:175 作者:小新 欄目:開發(fā)技術(shù)

這篇文章主要介紹python如何同時(shí)遍歷數(shù)組的索引和值,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!

你想在迭代一個(gè)序列的同時(shí)跟蹤正在被處理的元素索引。

獲取索引

內(nèi)置的 enumerate() 函數(shù)可以很好的解決這個(gè)問題:

>>> my_list = ['a', 'b', 'c']
>>> for idx, val in enumerate(my_list):
...  print(idx, val)
...
0 a
1 b
2 c

行號(hào)從1開始

為了按傳統(tǒng)行號(hào)輸出(行號(hào)從1開始),你可以傳遞一個(gè)開始參數(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() 來完成:

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)確來講是一個(gè) defaultdict ), 對(duì)于每個(gè)單詞有一個(gè) key ,每個(gè) key 對(duì)應(yīng)的值是一個(gè)由這個(gè)單詞出現(xiàn)的行號(hào)組成的列表。 如果某個(gè)單詞在一行中出現(xiàn)過兩次,那么這個(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ù)來代替就顯得更加優(yōu)雅了:

for lineno, line in enumerate(f):
 # Process line
 ...

enumerate() 函數(shù)返回的是一個(gè) enumerate 對(duì)象實(shí)例, 它是一個(gè)迭代器,返回連續(xù)的包含一個(gè)計(jì)數(shù)和一個(gè)值的元組, 元組中的值通過在傳入序列上調(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):
 ...

以上是“python如何同時(shí)遍歷數(shù)組的索引和值”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI