在调用函数的列表推导中有效地过滤掉"无"项

scr*_*tal 12 python list-comprehension list python-2.7

我有一个列表理解,调用一个可能返回的函数None.

>>> f = lambda x: x if x < 3 else None
>>> l = [f(x) for x in [1,2,3,4]]
[1, 2, None, None]
Run Code Online (Sandbox Code Playgroud)

我希望上面的列表理解,没有'无'条目.

什么是更有效的方式来执行以下操作,而不会产生额外的开销,同时保持列表理解的效率?

>>> filter(None, [f(x) for x in [1,2,3,4]])
[1, 2]
Run Code Online (Sandbox Code Playgroud)

Ste*_*uch 20

添加if到您的理解中,如:

l = [y for y in (f(x) for x in [1,2,3,4]) if y is not None]
Run Code Online (Sandbox Code Playgroud)

通过在列表推导中放置生成器表达式,您只需要对函数进行一次求值.此外,生成器表达式是一个生成器,因此不需要额外的中间存储.