簡體   English   中英

python 列表理解中的作業

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM