如何在 Python 中对元组列表进行 enumerate()?

Posted

技术标签:

【中文标题】如何在 Python 中对元组列表进行 enumerate()?【英文标题】:How do I enumerate() over a list of tuples in Python? 【发布时间】:2010-10-25 08:43:10 【问题描述】:

我有一些这样的代码:

letters = [('a', 'A'), ('b', 'B')]
i = 0
for (lowercase, uppercase) in letters:
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)
    i += 1

有人告诉我有一个 enumerate() 函数可以为我处理“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)

或者有没有更优雅的方式?

【问题讨论】:

enumerate vs itertools:在它们之间进行选择时我们应该考虑什么? 【参考方案1】:

这是一个很好的方法:

letters = [('a', 'A'), ('b', 'B')]
for i, (lowercase, uppercase) in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, lowercase, uppercase)

【讨论】:

这叫什么?我想查找有关此语法的更多信息。 @Zak:如果你的意思是分配给(lowercase, uppercase),这叫做“解包”。 整洁。不知道解包语法可以嵌套。【参考方案2】:

这就是我的做法:

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

【讨论】:

【参考方案3】:

你也可以这样做:

letters = [('a', 'A'), ('b', 'B')]
for i, letter in enumerate(letters):
    print "Letter #%d is %s/%s" % (i, letter[0], letter[1])

【讨论】:

以上是关于如何在 Python 中对元组列表进行 enumerate()?的主要内容,如果未能解决你的问题,请参考以下文章

如何对元组列表进行分组?

如何根据某些文本标准对元组列表进行分组/存储?

如何按两个元素对元组列表进行排序?

如何根据另一个列表对元组列表进行排序

如何根据另一个列表中元组元素的顺序对元组列表进行排序?

python 数组和列表的区别