如何在不同长度的列表之间迭代?

Ger*_*mán 1 python iteration loops list

我有两个列表需要一起迭代。让我展示如何:

listA=[1,2,3,4]
listB=["A","B","C"]
Run Code Online (Sandbox Code Playgroud)

从这些列表中,我想要这个列表

ListC=("1A","2B","3C","4A")
Run Code Online (Sandbox Code Playgroud)

甚至制作一个更长的列表,我可以在其中循环相同的迭代

ListC=("1A","2B","3C","4A","1B","2C","3A","4C".... and so on)
Run Code Online (Sandbox Code Playgroud)

我在网上找不到任何可以回答这个问题的教程 谢谢。

che*_*ner 8

使用zipitertools.cycle

>>> from itertools import cycle
>>> listA = [1, 2, 3, 4]
>>> listB = ["A", "B", "C"]
>>> [f'{x}{y}' for x, y in zip(listA, cycle(listB))]
['1A', '2B', '3C', '4A']

# listA:         1    2    3    4
# cycle(listB): "A"  "B"  "C"  "A"  "B"  "C" ...
Run Code Online (Sandbox Code Playgroud)

cycle无休止地循环其论证的要素;zip在其较短的参数用完后停止迭代。

您可以使用cycle这两个名单,但结果将是值的无限序列; 你需要使用类似的东西itertools.islice来获取结果的有限前缀。

>>> from itertools import cycle, islice
>>> [f'{x}{y}' for x, y in islice(zip(cycle(listA), cycle(listB)), 8)]
['1A', '2B', '3C', '4A', '1B', '2C', '3A', '4B']

# cycle(listA):  1   2   3   4   1   2   3   4   1   2   3   4   1  ...
# cycle(listB): "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" "B" "C" "A" ...
# Note that the result itself is a cycle of 12 unique elements, because
# the least common multiple (LCM) of 3 and 4 is 12.
Run Code Online (Sandbox Code Playgroud)