【问题标题】:What is the best way to iterate over multiple lists at once? [duplicate]一次迭代多个列表的最佳方法是什么? [复制]
【发布时间】:2012-04-22 05:59:01
【问题描述】:

假设我有两个或多个相同长度的列表。迭代它们的好方法是什么?

ab 是列表。

 for i, ele in enumerate(a):
    print ele, b[i]

for i in range(len(a)):
   print a[i], b[i]

或者我缺少任何变体?

使用其中一个有什么特别的优势吗?

【问题讨论】:

    标签: python


    【解决方案1】:

    通常的方式是使用zip():

    for x, y in zip(a, b):
        # x is from a, y is from b
    

    当两个迭代器 ab 中较短的一个被用完时,这将停止。另外值得注意的是:itertools.izip()(仅限 Python 2)和itertools.izip_longest()itertools.zip_longest() 在 Python 3 中)。

    【讨论】:

    • 打败我。值得注意的是,Python 3 的zip izip。另外,没有zip_longestmap(None, a, b) 可以。
    • @ephemient:后者仅在 Python 2 上,再次。在 Python 3 上,这将在最短的序列上停止。 izip_longest() 在 Python 3 上被称为 zip_longest()...
    • @SvenMarnach 但是当两个列表之一结束时 zip 停止,如果我想迭代到 python3 中的最大长度怎么办
    • @Abhay 其实上面也有回答——你需要使用iterloos.zip_longest()
    【解决方案2】:

    你可以使用zip:

    >>> a = [1, 2, 3]
    >>> b = ['a', 'b', 'c']
    >>> for x, y in zip(a, b):
    ...   print x, y
    ... 
    1 a
    2 b
    3 c
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 2016-05-05
      • 2017-04-05
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-14
      相关资源
      最近更新 更多