加入两个长度不同的列表,重复最短的

vdk*_*dkd 4 python list

我有两个清单:

l1 = [1,2,3,4,5]
l2 = ["a","b","c"]
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

l3 = [(1,"a"),(2,"b"),(3,"c"),(4,"a"),(5,"b")]
Run Code Online (Sandbox Code Playgroud)

所以基本上我想加入两个列表,当它们的长度不同时,我必须通过从头开始重复来传播其他列表中的项目。

我试过:

使用 zip() 但它对这种情况不利,因为它以相等的长度连接

>>> list(zip(l1,l2))
[(1, 'a'), (2, 'b'), (3, 'c')]
Run Code Online (Sandbox Code Playgroud)

yat*_*atu 7

您可以使用itertools.cycle以便zip聚合来自l1循环版本的元素l2

from itertools import cycle

list(zip(l1, cycle(l2)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'a'), (5, 'b')]
Run Code Online (Sandbox Code Playgroud)

cycle当您循环的迭代器与其他迭代器组合或压缩时非常有用,因此只要其他迭代器耗尽,迭代过程就会停止。否则它将无限期地循环(如果只有一个cycle生成器,或者所有其他可迭代对象也是无限的,正如@chepner 指出的那样)

  • 我只是吹毛求疵,主要是为了避开预期的问题。答案是肯定的。 (2认同)