循环遍历两个列表,重复最短的列表直到最长的列表结束。

34

我相信有一种简单明显的方式可以实现这个目标,但我已经搜索并阅读了文档,却找不到任何相关信息。

我想要实现的是:

la = ['a1', 'a2', 'a3', 'a4']
lb = ['b1', 'b2']
result = ['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2']

我有一个日期列表,其中一些日期上标有标记。我还有一个更大的日期列表,我想尽可能多地将较小的列表放入较大的列表中。这可能需要某种循环,因为我需要访问最终结果中更大列表中的日期。

出于某种原因,我无法找到一个好的方法来做到这一点。


1
这个回答解决了你的问题吗?如何压缩两个不同大小的列表? - Georgy
4个回答

37
假设 lalb 长:
>>> import itertools
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))]
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2']
  • itertools.cycle(lb) 返回一个循环迭代器,其中元素来自于lb

  • zip(...) 返回一个由元组构成的列表,其中每个元组包含la中的一个元素和与之匹配的迭代器中的元素。


20

请尝试

result = ["_".join((i, j)) for i, j in itertools.izip(la, itertools.cycle(lb))]

3
在Python 3中,izip已被内置的zip函数所取代。 - Doopy
5
如果我们不知道 lalb 哪一个会先耗尽,应该怎么办? - Moberg

2
import itertools
la = ['a1', 'a2', 'a3', 'a4']
lb = ['b1', 'b2']
for i, j in zip(la, itertools.cycle(lb)):
    print('_'.join((i,j)))

0

仅使用zip函数,重复较短的列表。

[x+'_'+y for x,y in zip(la, lb*2)]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接