我能夠使用map
和sum
來實現此功能,但如何使用reduce
?Python如何減少元組列表?
有2個列表:a
,b
,它們具有相同數量的值。我想計算
a[0]*b[0]+a[1]*b[1]+...+a[n]*b[n]
使用map
工作版本我寫的是
value = sum(map(lambda (x,y): x*y, zip(a, b)))
如何使用reduce
呢?我寫道:
value = reduce(lambda (x,y): x[0]*y[0] + x[1]*y[1], zip(a, b)))
我得到了錯誤「TypeError: 'float' object is unsubscriptable
」。
任何人都可以對此有所瞭解嗎?
您的lambda需要兩個兩元素元組。當減少列表中的前兩個元素時,這很好,但是現在下一個減少將對lambda(這是一個float)和列表的下一個元素(它是一個元組)的結果起作用,並且您的lambda可以處理不了。你的lambda需要一個數字和一個元組,並且用一個初始值對這個數字進行種子處理(就像antonakos的答案一樣)。 – dfan 2011-04-07 14:10:05