Python 连接两个不带'的列表;t长度相同,重复最短 我有两份清单: 我的预期产出:
所以基本上我想把两个列表连接起来,当它们的长度不一样时,我必须通过从一开始就重复来分散其他列表中的项目 我试过: 使用zip(),但对这种情况不好,因为它的连接长度相等Python 连接两个不带'的列表;t长度相同,重复最短 我有两份清单: 我的预期产出:,python,list,Python,List,所以基本上我想把两个列表连接起来,当它们的长度不一样时,我必须通过从一开始就重复来分散其他列表中的项目 我试过: 使用zip(),但对这种情况不好,因为它的连接长度相等 >>> list(zip(l1,l2)) [(1, 'a'), (2, 'b'), (3, 'c')] 您可以使用,以便zip聚合来自l1和循环版本的l2的元素: from itertools import cycle list(zip(l1, cycle(l2))) # [(1, 'a'), (2, 'b
>>> list(zip(l1,l2))
[(1, 'a'), (2, 'b'), (3, 'c')]
您可以使用,以便zip
聚合来自l1
和循环版本的l2
的元素:
from itertools import cycle
list(zip(l1, cycle(l2)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'a'), (5, 'b')]
cycle
在您正在循环的iterable与其他iterable组合或压缩时非常有用,因此一旦其他iterable耗尽,迭代过程就会停止。否则它将无限期地循环(如果有一个循环
生成器,或者正如@chepner指出的,所有其他iterables也是无限的)如何循环工作?当我在zip()之外调用它时,它似乎创建了一个无止境的循环。Cycle在与其他某个iterable组合时非常有用,因此当另一个iterable耗尽时,迭代过程就会停止,因为Cycle将无限期地循环@vdkd这正是它所做的,但它是惰性地这样做的。由于zip
一旦到达较短参数的末尾,就停止读取其两个参数,因此不存在无限循环。如果你给出zip
所有无限序列,或者如果你使用itertools.zip\u longest
至少有一个无限序列,你会得到一个无限循环。count
和repeat
也会产生无限序列,就像使用无限循环或无终止递归的生成器函数一样。我只是吹毛求疵,主要是为了避开预期的问题。答案是肯定的。
>>> list(zip(l1,l2))
[(1, 'a'), (2, 'b'), (3, 'c')]
from itertools import cycle
list(zip(l1, cycle(l2)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'a'), (5, 'b')]