【问题标题】:Iterate over a tuple of lists [duplicate]迭代列表元组[重复]
【发布时间】:2017-04-07 09:43:18
【问题描述】:

我有一个列表元组。元组中的每个列表都具有相同数量的元素。如何在 for 循环中迭代它

例如:

tupleList = ([1,2,3], ['label1', 'label2', 'label3'])
for (val, label) in <something>:
    print val, label

应该输出:

1, label1
2, label2
3, label3

注意:这个元组列表可以包含两个以上的列表。

PS:对于那些选择此作为副本的人,请检查响应以获取正确的解决方案。这与遍历两个单独的列表不同。

【问题讨论】:

  • 您的tupleList 可以包含超过 2 个列表吗?
  • 是的,超过 2 个列表是可能的。但目前的名单数量,我会提前知道。
  • 您可以应用这样的循环 - for i in range(1, len(tupleList), 2)。在里面,您可以在tupleList[i]tupleList[i+1] 上应用zip,就像答案中提到的那样。
  • 您可能会注意到,单独压缩元组的每个单独元素是更长的解决方案。而@Roelant 的解决方案提供了一个更短的替代方案。

标签: python loops tuples


【解决方案1】:

您可以使用 zip 并使用 asterix 语法展平 tuple_list。

tuple_list = ([1,2,3], ['label1', 'label2', 'label3'])
for val, label in zip(*tuple_list):
     print(val, label)

如果你还在 python 2.7 中:

import itertools
tuple_list = ([1,2,3], ['label1', 'label2', 'label3'])
for val, label in itertools.izip(*tuple_list):
     print val, label

【讨论】:

  • 您可能还想尝试itertools.izip 在 Python 2 中创建迭代器而不是列表
  • 谢谢,已添加 :)
  • @hlt 不需要itertools.izip,它可以在Python2中与zip一起使用
  • @RahulKP:生成器比列表更漂亮;)
【解决方案2】:

这是一个使用 zip 的简单解决方案

tupleList = ([1,2,3], ['label1', 'label2', 'label3'])
for (val, label) in zip(tupleList[0],tupleList[1]):
    print(val, label)

【讨论】:

    【解决方案3】:

    试试这个,

    In [3]: for v,k in zip(*tupleList):
       ...:     print v,k
       ...:     
    1 label1
    2 label2
    3 label3
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-01-30
      • 2013-09-11
      • 2023-03-23
      • 2013-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多