【问题标题】:Zip cyclically over multiple lists in Python在 Python 中循环压缩多个列表
【发布时间】:2016-08-04 11:51:40
【问题描述】:

假设我有这三个列表:

aList = [1,2,3,4,5,6]
bList = ['a','b','c','d']
cList = [1,2]

我想使用zip 对它们进行迭代。

通过zip 使用循环如下:

from itertools import cycle
for a,b,c in zip(aList, cycle(bList), cycle(cList)):
    print a,b,c

我得到的结果是:

1 a 1
2 b 2
3 c 1
4 d 2
5 a 1
6 b 2

虽然我希望我的结果是这样的:

1 a 1
2 b 1
3 c 1
4 d 1
5 a 2
6 b 2

【问题讨论】:

    标签: python zip itertools cycle


    【解决方案1】:

    您可以使用itertools.repeat()在第二个列表的基础上重复第三个列表的项目:

    >>> from itertools import repeat, chain
    >>> 
    >>> zip(aList,cycle(bList), chain.from_iterable(zip(*repeat(cList, len(bList)))))
    [(1, 'a', 1),
     (2, 'b', 1),
     (3, 'c', 1),
     (4, 'd', 1),
     (5, 'a', 2),
     (6, 'b', 2)]
    

    【讨论】:

    • 我还想添加一个 dList = [3,4]
    • @AbhijayGhildyal 如果您使用的是numpy,您应该将标签添加到您的问题和/或提及适当的示例。我建议你问另一个问题,因为它可能有完全不同的答案。你会得到一个合适的。
    【解决方案2】:

    您可以在cb上应用itertools.product,然后在print语句中恢复它们原来的顺序:

    >>> from itertools import product, cycle
    >>>
    >>> for a, b_c in zip(aList, cycle(product(cList, bList))):
    ...     print a, b_c[1], b_c[0]
    ...
    1 a 1
    2 b 1
    3 c 1
    4 d 1
    5 a 2
    6 b 2
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-04
      • 2020-07-16
      • 1970-01-01
      • 2020-11-22
      • 2020-11-21
      • 2018-02-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多