我能够使用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