使用map来汇总列表的元素

时间:2017-12-21 14:39:54

标签: python python-3.x

我想知道是否可以使用map来对列表中的元素求和。

假设He He

a = [1, 2, 3, 4]会出现list(map(sum, a))错误,因为列表需要迭代。

int object is not iterable是一个有效的陈述但是给定了对象,我没有看到一种简单的方法来取消引用它。

map(sum, a)将返回列表中的对象

this回答说应该很容易。我在这里缺少什么?

5 个答案:

答案 0 :(得分:7)

x = list(map(sum,a)) 

相当于

x = []
for i in a:
    x.append(sum(i))

Sum需要一个iterable来应用sum。如果您看到文档语法以这种方式sum(iterable[, start])。由于int不是可迭代的,因此您会收到该错误。

答案 1 :(得分:3)

map将函数应用于列表中的每个元素。相反,您可以使用reduce

a = [1, 2, 3, 4]
sum_a = reduce(lambda x, y:x+y, a)

在这种情况下,可以使用纯sum,但为了更加实用,reduce是更好的选择。

或者,在Python3中:

from functools import reduce
a = [1, 2, 3, 4]
sum_a = reduce(lambda x, y:x+y, a)

答案 2 :(得分:2)

当然,如果只想对列表中的元素求和,他应该简单地调用sum(list_)

现在,提出你的问题:map,Python内置和模式都是指将函数应用于数据序列,并生成另一个序列,并为初始化中的每个元素提供单独的结果序列

sum不这样做 - 它会为整个序列产生一个结果。该模式称为reduce,因此Python内置了这样做。在Python 3中,它被降级了#34;到functools模块,因为它比地图模式更少使用。

sum内置本身使用" reduce"单独使用模式 - 但如果您使用reduce模式显式重新创建sum,它就像:

from functools import reduce
a = [1, 2, 3, 4]
reduce(lambda result, value: result + value, a, 0)

第一个参数是一个可调用的,它采用"累计结果到目前为止",第二个值是你想要运行的项目序列减少,第三个参数是要传递的初始值作为累积结果。 (所以,它从零开始)。对于乘法,我们可以使用:

reduce(lambda result, value: result * value, a, 1)

答案 3 :(得分:0)

错误int object is not iterable不是因为list期望可迭代,而sum期望迭代。 以下代码:

map(sum , [1,2,3,4])

有点等同于:

[sum(x) for x in [1,2,3,4]]

执行最后一个表达式会产生相同的错误。

答案 4 :(得分:0)

下面是做纯粹功能的一种方式。

from operator import add
from functools import reduce
result = reduce(add, a)