Пропустить запись в выражении генератора
Каков наилучший способ пропустить записи в выражении генератора, созданные с использованием функции и другого генератора?
По сути, я ищу выражение, которое выглядит так:
some_iter = (some_function(_x, _y, **kwargs) or continue for _x, _y in some_generator(*x))
(но continue
утверждение явно не работает в этом контексте)
Функционально он должен действовать так:
def some_iter(*x):
for _x, _y in some_generator(*x):
x = some_function(_x, _y, **kwargs)
if x:
yield x
1 ответ
Понимание списка позволяет фильтровать и затем отображать. Вы хотите вручную map
Ваша функция в первую очередь.
gen = (x for x in map(function, generator(*args)) if x)
Выше для generator
это дает единственные аргументы. Ты можешь использовать itertools.starmap
если он возвращает tuple
аргументов.
from itertools import starmap
gen = (x for x in starmap(function, generator(*args)) if x)
Наконец, если вам также необходимо передать аргументы ключевых слов, вам нужно полагаться на lambda
функция.
gen = (x for x in map(lambda args: function(*args, **kwargs), generator(*g_args)) if x)
Хотя, обратите внимание, что в этот момент генератор стилей функций может быть более читабельным.
def gen(*x):
for args in generator(*x):
x = some_function(*args, **kwargs)
if x:
yield x