объединить два списка, которые не имеют одинаковую длину, повторяя самые короткие - PullRequest
4 голосов
/ 08 февраля 2020

У меня есть два списка:

l1 = [1,2,3,4,5]
l2 = ["a","b","c"]

Мой ожидаемый результат:

l3 = [(1,"a"),(2,"b"),(3,"c"),(4,"a"),(5,"b")]

Так что в основном я хочу объединить два списка, и когда они не совпадают по длине, я должен распространять элементы из другого списка, повторяя с начала.

Я пытался:

, используя zip (), но это плохо для этого случая, поскольку он объединяется с равной длиной

>>> list(zip(l1,l2))
[(1, 'a'), (2, 'b'), (3, 'c')]

1 Ответ

7 голосов
/ 08 февраля 2020

Можно использовать itertools.cycle, чтобы zip агрегировал элементы как из l1, так и из в цикле версии l2:

from itertools import cycle

list(zip(l1, cycle(l2)))
# [(1, 'a'), (2, 'b'), (3, 'c'), (4, 'a'), (5, 'b')]

cycle очень полезен, когда итерируемая, по которой вы циклически комбинируетесь, или застегнута с другими итерациями, поэтому итеративный процесс останавливается, как только заканчивается другая итерация. В противном случае он будет продолжать циклически работать бесконечно (в случае, если есть один генератор cycle или также, что все другие итерации также бесконечны, как указывает @chepner)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...