簡體   English   中英

如何對 Python 中的元組列表進行枚舉()?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM