给定一个可以返回 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)]
但是它对于那些不返回None
两次的所有内容都运行fn(i)
,如果fn
是一个昂贵的函数,则这是不可取的。
是否有任何方法可以在不运行两次函数的情况下使用漂亮的Python推导?
一种可能的解决方案:
output = [fn(i) for i in lst]
output = [o for o in f if o]