python - python列表理解中的分配

标签 python python-3.x list-comprehension

我正在寻找一种在列表理解中进行分配的方法。我想将类似以下代码的内容重写为列表理解。

我有这个“昂贵”的功能:

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/

相关文章:

python - re.findall 表现得很奇怪

python-3.x - 限制异常值

list - 元组列表中的模式匹配和列表理解

python - 生成器与 Python 中的列表理解性能

python - 如何使用 rc522 和 Raspberry Pi 读取 7 个字节长的 Desfire uid?

python - 无法安装 python 包并在 GitHub Action 中使用它

python - 我试图在 if 语句 python3 中的一个单词下划线

python - 更改字典中特定键的特定值

python - 扁平化 python 列表的列表理解如何工作?

python - 在 python 中使用多个输出流?