如何在 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() 函数可以为我处理“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)

还是有更优雅的方式?

原文由 mike 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 459
2 个回答

这是一种巧妙的方法:

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

原文由 RichieHindle 发布,翻译遵循 CC BY-SA 2.5 许可协议

我就是这样做的:

 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

原文由 Algorias 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏