Python如何合并多个列表?

13 投票
6 回答
20611 浏览
提问于 2025-04-16 15:16

我可以用 mapsum 来实现这个功能,但我想知道怎么用 reduce

这里有两个列表:ab,它们的值数量是一样的。我想计算

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

这里有一个使用 reducemap 的解决方案。

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)

撰写回答