跳过使用功能和其他生成器创建的生成器表达式中的条目的最佳方法是什么?
本质上,我正在寻找一个看起来像这样的表达式:
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
答案 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