Удобный способ сделать это, очевидно, [x for sublist in zip(List_a, List_b) for x in sublist]
, первоначально упомянутый DarrylG (хотя, возможно, с другим именем переменной, поскольку zip
выдает кортежи, а не списки). Но больше из любопытства, чем чего-либо еще, вот альтернатива:
import itertools
def intertwine(*lists):
return list(next(i) for i in itertools.cycle(iter(x) for x in lists))
Необычным в этом примере является то, что for i in itertools.cycle(...)
- это бесконечное l oop, но next(i)
может повышать StopIteration
, когда один из получаемых им итераторов исчерпан, и затем общий итератор (аргумент list
) будет обрабатывать его так же, как если бы for i in ...
l oop сделал то же самое.
Таким образом, это дает:
>>> intertwine([1,2,3], [4,5,6])
[1, 4, 2, 5, 3, 6]
Обратите внимание, что внешне эквивалентное понимание списка:
[next(i) for i in itertools.cycle(iter(x) for x in lists)]
будет не будет работать - явное StopIteration
будет быть поднятым в коде пользователя.