避免在列表理解中两次计算相同的表达式

vle*_*tre 2 python list-comprehension python-3.x

我在列表理解中使用一个函数和一个 if 函数:

new_list = [f(x) for x in old_list if f(x) !=0]
Run Code Online (Sandbox Code Playgroud)

令我烦恼的是,该表达式f(x)在每个循环中计算两次。

有没有办法以更清洁的方式做到这一点?类似于存储值或在列表理解的开头包含 if 语句。

hir*_*ist 5

您可以在列表理解中使用生成器表达式(以避免创建不必要的列表):

new_list = [fx for fx in (f(x) for x in old_list) if fx != 0]
Run Code Online (Sandbox Code Playgroud)

从 python 3.8 开始,您将能够执行以下操作

new_list = [fx for x in old_list if (fx := f(x)) != 0]
Run Code Online (Sandbox Code Playgroud)