在python中有条件地在一行中不产生任何内容

Ric*_*ann 1 python generator flat

我有发电机像

def not_nones(some_iterable):
    for item in some_iterable:
        if item is not None:
            yield item
Run Code Online (Sandbox Code Playgroud)

但由于"扁平比嵌套好",我想在一行中做到这一点,如:

def not_nones(some_iterable):
    for item in some_iterable:
        yield item if item is not None else None
Run Code Online (Sandbox Code Playgroud)

但这实际上会None成为发电机的一个项目.是否有可能在单行中不产生任何东西?

nne*_*neo 6

你可以只返回一个生成器表达式:

def not_nones(iterable):
    return (item for item in iterable if item is not None)
Run Code Online (Sandbox Code Playgroud)

或者对于一个真正的单行:

not_nones = lambda it: (i for i in it if i is not None)
Run Code Online (Sandbox Code Playgroud)

在这一点上,它越来越多地进入代码高尔夫领域.

但实际上,您当前的代码没有太大问题; 它以合理的方式做它需要做的事情.您的代码就是我在这种情况下编写的代码.