循环2个列表,重复最短,直到最长

Mat*_*sen 22 python loops list

我确信有一个简单而明显的方法可以做到这一点,但我一直在谷歌搜索和阅读文档,我只是找不到任何东西.

这就是我想要实现的目标:

la = ['a1', 'a2', 'a3', 'a4']
lb = ['b1', 'b2']
result = ['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2']
Run Code Online (Sandbox Code Playgroud)

我有一个日期列表,其中一些日期上有标记的东西.然后我有一个更大的日期列表,我想尽可能多地将最小的列表放在更大的列表中.它可能需要某种循环,因为我需要访问较大列表中的日期以获得最终结果.

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

sna*_*ile 25

假设la时间长于lb:

>>> import itertools
>>> [x+'_'+y for x,y in zip(la, itertools.cycle(lb))]
['a1_b1', 'a2_b2', 'a3_b1', 'a4_b2']
Run Code Online (Sandbox Code Playgroud)
  • itertools.cycle(lb)返回元素的循环迭代器lb.

  • zip(...)返回一个元组列表,其中每个元素对应一个la与迭代器中的匹配元素耦合的元素.


Sve*_*ach 12

尝试

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

  • 如果我们不知道 `la` 和 `lb` 哪个先被耗尽怎么办? (3认同)
  • [izip 替换为 Python 3 中的内置 zip](/sf/ask/2286168671/) (2认同)