【发布时间】:2017-10-02 23:08:27
【问题描述】:
给定一些可以返回 None 或其他值的函数和一个值列表:
def fn(x):
if x == 4:
return None
else return x
lst = [1, 2, 3, 4, 5, 6, 7]
我想要一个不返回 None 的 fn() 输出列表
我有一些看起来像这样的代码:
output = []
for i in lst:
result = fn(i)
if result:
output.append(result)
我可以将其表达为这样的列表理解:
output = [fn(i) for i in lst if fn(i)]
但它运行fn(i) 任何不返回None 两次如果fn 是一个昂贵的功能是不可取的。
有没有什么方法可以在不运行两次函数的情况下获得很好的 Pythonic 理解?
一个可能的解决方案:
output = [fn(i) for i in lst]
output = [o for o in f if o]
【问题讨论】:
-
你知道 Pythonic 是什么吗?你的 for 循环。
标签: python list list-comprehension