2016-11-08 59 views
0

我正在檢查用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來實現這一點。

+1

你閱讀的文檔是什麼[減少](https://docs.python.org/3/library/functools.html#functools.reduce)呢? – idjaw

+0

'reduce'使用你的'lambda'並在'myList'中的所有元素上重複它 - 每次它將兩個元素減少爲一個元素。 – furas

+0

是的,我已經解釋了減少了什麼。我需要的是將其轉換爲列表理解。我來自java背景,所以我不熟悉這個術語。 – Prethia

回答

3

對應井列表理解的部分是它的第二個參數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) 
+0

我瞭解你和furas編寫的代碼,但在理解myList中的0意味着什麼時,仍然存在一些問題,0。那裏還有一個/ lengthOfList。所以我的新列表應該由myList = sum(y [0] for myList)來定義,我的返回值應該是myList/len(Actions)。我對麼? – Prethia

+0

沒錯。關於0,它只是第一次調用該函數時作爲'x'參數傳遞的值。如果沒有第三個參數,則首先在前兩個列表項上調用該函數,然後在前一個結果和下一個連續調用的列表元素上調用該函數。換句話說,'reduce(f,lst)== reduce(f,lst [1:],lst [0])'。 (注意,這意味着沒有第三個參數,列表不能爲空;'reduce'在這種情況下會引發'TypeError')。 – chepner

+0

看來我對你的評論有一個錯誤。由於在行尾有一個[],我應該返回[myList/lenActions(),[])。我接受你的答案 – Prethia