跳过生成器表达式中的条目

时间:2018-09-24 20:49:43

标签: python expression generator generator-expression

跳过使用功能和其他生成器创建的生成器表达式中的条目的最佳方法是什么?

本质上,我正在寻找一个看起来像这样的表达式:

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 个答案:

答案 0 :(得分:0)

列表理解功能可以过滤然后映射。您想先手动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