我正在檢查用python編寫的代碼,但我對以下行感到困惑。Python 2.7減少lambda語句轉換爲列表理解
return (reduce(lambda x, y: x + y[0],myList, 0)/len(Actions),)
此代碼將x和y作爲輸入和x和y的第一個元素。之後,我認爲它將myList減少爲x + y [0]的值。我如何使用列表理解而不是使用lambda來實現這一點。
我正在檢查用python編寫的代碼,但我對以下行感到困惑。Python 2.7減少lambda語句轉換爲列表理解
return (reduce(lambda x, y: x + y[0],myList, 0)/len(Actions),)
此代碼將x和y作爲輸入和x和y的第一個元素。之後,我認爲它將myList減少爲x + y [0]的值。我如何使用列表理解而不是使用lambda來實現這一點。
對應井列表理解的部分是它的第二個參數y
還原的功能是什麼:
tmp = [ y[0] for y in myList ]
還原功能,然後一個元素結合這個名單在同一時間的「蓄電池」 x
:
x = 0 # The third argument to reduce
tmp = [ y[0] for y in myList ]
for y in tmp:
x += y
或者更簡單地說
x = 0
for y in myList:
x += y[0]
或者,你可能已經認可現在
sum(y[0] for y in myList)
我瞭解你和furas編寫的代碼,但在理解myList中的0意味着什麼時,仍然存在一些問題,0。那裏還有一個/ lengthOfList。所以我的新列表應該由myList = sum(y [0] for myList)來定義,我的返回值應該是myList/len(Actions)。我對麼? – Prethia
沒錯。關於0,它只是第一次調用該函數時作爲'x'參數傳遞的值。如果沒有第三個參數,則首先在前兩個列表項上調用該函數,然後在前一個結果和下一個連續調用的列表元素上調用該函數。換句話說,'reduce(f,lst)== reduce(f,lst [1:],lst [0])'。 (注意,這意味着沒有第三個參數,列表不能爲空;'reduce'在這種情況下會引發'TypeError')。 – chepner
看來我對你的評論有一個錯誤。由於在行尾有一個[],我應該返回[myList/lenActions(),[])。我接受你的答案 – Prethia
你閱讀的文檔是什麼[減少](https://docs.python.org/3/library/functools.html#functools.reduce)呢? – idjaw
'reduce'使用你的'lambda'並在'myList'中的所有元素上重複它 - 每次它將兩個元素減少爲一個元素。 – furas
是的,我已經解釋了減少了什麼。我需要的是將其轉換爲列表理解。我來自java背景,所以我不熟悉這個術語。 – Prethia