【发布时间】:2019-02-28 10:15:44
【问题描述】:
跳过使用函数和另一个生成器创建的生成器表达式中的条目的最佳方法是什么?
本质上,我正在寻找一个看起来像这样的表达式:
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
【问题讨论】:
-
你必须使用嵌套生成器:
(_x for _x in (function(_x) for _x in generator(*x)) if _x)或filter(None, (function(_x) for _x in generator(*x)) -
在python3.8中可以使用赋值表达式
(y := function(_x) for _x in generator(*x) if y)(我觉得) -
对了,为什么不使用函数式生成器呢?它工作得非常好并且更具可读性。
-
我可能最终会使用函数式生成器,但问题的目的是询问是否有一种我可能不知道的使用生成器表达式的方法。如果只有@coldspeed 的答案适用于旧版本的 python!
标签: python expression generator generator-expression