0

跳过使用函数和另一个生成器创建的生成器表达式中的条目的最佳方法是什么?

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

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
4

1 回答 1

0

列表理解允许过滤然后映射。您想先手动执行map您的功能。

gen = (x for x in map(function, generator(*args)) if x)

以上是针对generator产生单个参数的 a 。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
于 2018-09-24T20:59:25.623 回答