如何在 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()?的主要内容,如果未能解决你的问题,请参考以下文章