Работа с генераторами python
Мне нужно написать некий аналог chain, который может вытаскивать из генераторов поочередно по одному значению (генераторы лежат в списке arg_list) и выводить в один список
Я попробовала так:
list(map(lambda *i: i, *arg_list))
Однако это работает только для генераторов одинакового размера, а мне нужно если один заканчивается, продолжать выводить значения из других
Что здесь можно придумать?
Ответы (1 шт):
Автор решения: extrn
→ Ссылка
from itertools import zip_longest
arg_list = [[1,2], [3,4,5], [6]]
print([
x
for tup in zip_longest(*arg_list)
for x in tup
if x is not None
])
[1, 3, 6, 2, 4, 5]
Или вот более универсальный вариант, если среди элементов может встречаться None
arg_list = [[1,2], [3,4,5], [6, None]]
fill = object()
print([
x
for tup in zip_longest(*arg_list, fillvalue=fill)
for x in tup
if x is not fill
])
[1, 3, 6, 2, 4, None, 5]