Python如何合并多个列表?
我可以用 map
和 sum
来实现这个功能,但我想知道怎么用 reduce
。
这里有两个列表: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
"。
有人能帮我解释一下吗?
6 个回答
7
我会这样做(我觉得你不需要用到lambda)...
sum(x*y for x, y in zip(a, b))
这样做看起来也更清楚一些。把A和B配对起来,乘起来,然后把结果加起来。
8
这里有一个使用 reduce
和 map
的解决方案。
from operator import add,mul
a = [1,2,3]
b = [4,5,6]
print reduce(add,map(mul,a,b))
8
这个 lambda 函数的第一个参数是到目前为止的总和,第二个参数是接下来的一对元素:
value = reduce(lambda sum, (x, y): sum + x*y, zip(a, b), 0)