【问题标题】:How do I enumerate() over a list of tuples in Python?如何在 Python 中对元组列表进行 enumerate()?
【发布时间】: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:在它们之间进行选择时我们应该考虑什么?

标签: python list enumerate


【解决方案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])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多