我正在寻找一种在列表理解中进行分配的方法。我想将类似以下代码的内容重写为列表理解。
我有这个“昂贵”的功能:
import time
def f(x):
time.sleep(1)
return x + 1
这个循环:
l = []
for value in [1, 2, 3]:
x = f(value)
l.append(x + x)
我想将其重写为列表理解:
l = [
f(value) + f(fvalue)
for value in [1, 2, 3]
]
但由于调用 f(value)
的成本很高,我想尽量减少调用次数(以下代码片段不会运行):
l = [
(x = f(value))
x + x
for value in [1, 2, 3]
]
我读过赋值表达式 (:=
) ( https://www.python.org/dev/peps/pep-0572/#changing-the-scope-rules-for-comprehensions ),但我似乎无法理解。
最佳答案
我的方法是嵌套多个列表理解,比如
l_new = [x * x * y for x, y in [f(value) for value in [1, 2, 3]]]
所以 f()
应该只为每个值调用一次。
关于python - python列表理解中的分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70730199/