我想把
注意:这不是解决方案,因为它会调用两次昂贵的调用。
foo_list
中的每个元素传递给函数expensive_call
,并获取所有输出为真值的项目列表。我想使用列表推导式来实现,这有可能吗?例如:
类似以下代码:
result_list = [y := expensive_call(x) for x in foo_list if y]
or....
result_list = [y for x in foo_list if y := expensive_call(x)]
注意:这不是解决方案,因为它会调用两次昂贵的调用。
result_list = [expensive_call(x) for x in foo_list if expensive_call(x)]
如果有人推荐使用“none list comprehension”,在此之前我需要说明一下,我们可以这样做:
result_list = []
for x in foo_list:
result = expensive_call(x)
result and result_list.append(result)
[x for x in foo_list if expensive_call(x)]
吗?有何困难?(这也对应于您的非压缩版本的代码。) - Karl Knechtel[y for x in data for y in [expensive_call(x)] if y]
。这是一个非常常见的习惯用法,实际上有一种字节码优化方法,它不会创建一个列表[expensive_call(x)]
,而是直接将expensive_call(x)
的结果分配给本地变量y
。个人而言,我更喜欢使用普通的循环。 - juanpa.arrivillaga