Eri*_*lum 5 python list-comprehension list
给定一些可以返回 None 或另一个值的函数以及一个值列表:
def fn(x):
if x == 4:
return None
else return x
lst = [1, 2, 3, 4, 5, 6, 7]
Run Code Online (Sandbox Code Playgroud)
我想要一个fn()不返回 None的输出列表
我有一些有效的代码,如下所示:
output = []
for i in lst:
result = fn(i)
if result:
output.append(result)
Run Code Online (Sandbox Code Playgroud)
我可以将其表示为列表理解,如下所示:
output = [fn(i) for i in lst if fn(i)]
Run Code Online (Sandbox Code Playgroud)
但它运行fn(i)任何不返回None两次的东西,如果fn是一个昂贵的函数,这是不可取的。
有没有办法在不运行函数两次的情况下获得很好的pythonic理解?
一个可能的解决方案:
output = [fn(i) for i in lst]
output = [o for o in f if o]
Run Code Online (Sandbox Code Playgroud)
你的问题是None由函数产生的,而不是你正在迭代的东西。尝试
output = [fi for fi in map(fn, lst) if fi is not None]
Run Code Online (Sandbox Code Playgroud)