[英]Assignments in python list comprehension
我正在尋找一種在列表理解中進行作業的方法。 我想將類似以下代碼的內容重寫為列表理解。
我有這個“昂貴”的 function:
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/#changeing-the-scope-rules-for-comprehensions )的信息弄明白。
我的方法是嵌套多個列表理解,比如
l_new = [x * x * y for x, y in [f(value) for value in [1, 2, 3]]]
所以f()
應該只為每個值調用一次。
這是另一種偽造它的方法:
[x+x for value in [1, 2, 3] for x in [f(value)]]
這可以通過海象運算符來完成。 請注意,您需要 Python 3.8 或更高版本。
l = [x:=10 * value for value in [1, 2, 3]]
帶一個快慢function。
import time
def slow_function(a):
time.sleep(1)
return a + 1
def fast_function(b):
return b + b
l = [
fast_function(x := slow_function(value))
for value in [1, 2, 3]
]
在這兩個示例中都可以跳過海象運算符,但也許真正的問題需要它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.