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)
我在网上找不到任何可以回答这个问题的教程 谢谢。
使用zip和itertools.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)