Пропустить запись в выражении генератора

Каков наилучший способ пропустить записи в выражении генератора, созданные с использованием функции и другого генератора?

По сути, я ищу выражение, которое выглядит так:

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
Другие вопросы по тегам