[英]How do I enumerate() over a list of tuples in Python?
我有一些這樣的代碼:
letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
i += 1
有人告訴我有一個 enumerate() function 可以為我處理“i”變量:
for i, l in enumerate(['a', 'b', 'c']):
print "%d: %s" % (i, l)
但是,我不知道如何將兩者結合起來:當所討論的列表由元組組成時,我如何使用枚舉? 我必須這樣做嗎?
letters = [('a', 'A'), ('b', 'B')]
for i, tuple in enumerate(letters):
(lowercase, uppercase) = tuple
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
還是有更優雅的方式?
這是一個很好的方法:
letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
我就是這樣做的:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i, lower, upper in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % (i, lower, upper)
編輯:拆包變得多余。 這是一種更緊湊的方式,根據您的使用情況可能有效或無效:
import itertools
letters = [('a', 'A'), ('b', 'B')]
for i in zip(itertools.count(),*zip(*letters)):
print "Letter #%d is %s/%s" % i
你也可以這樣做:
letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
print "Letter #%d is %s/%s" % (i, letter[0], letter[1])
你也可以寫一個生成器:
def enumerate_nested(nested_collection, start=0):
for index, row in enumerate(nested_collection, start):
yield index, *row
然后允許您遍歷元組(或列表)的集合並解壓縮值:
names = [["Heinz", "Steiner"], ["Fred", "Glauser"], ["Nicole", "Hauser"]]
for index, first_name, last_name in enumerate_nested(names, 1):
print(index, first_name, last_name)
但是,有一個更簡單的內置解決方案可以實現這一點。 看看Richie Hindle 的回答:
names = [["Heinz", "Steiner"], ["Fred", "Glauser"], ["Nicole", "Hauser"]]
for index, (first_name, last_name) in enumerate(names, 1):
print(index, first_name, last_name)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.