在列表推导中使用sum()时出错

时间:2015-04-08 09:08:33

标签: python python-3.x

我正在完成家庭作业,我写了下面的代码,这就是我想做的事情:

A = [10, 25, 40]
B = [1, 15, 20]
R = [a + b for (a,b) in zip(A,B)]
print(R)
>>> [11, 40, 60]

但是,当我将a + b更改为sum(a,b)时,我收到错误消息:

A = [10, 25, 40]
B = [1, 15, 20]
R = [sum(a,b) for (a,b) in zip(A,B)]
print(R)
>>> ... TypeError: 'int' object is not iterable

我明白这看起来像个愚蠢的问题,但我搜索了它并找不到答案。我对Python比较陌生,所以不太明白发生了什么。我试图遍历使用zip()生成的生成器对象,并且该对象绝对不是'int'类型。

4 个答案:

答案 0 :(得分:3)

sum takes an iterable as a parameter。您应该执行以下操作:

R = [sum([a,b]) for (a,b) in zip(A,B)]

如果您只有两个元素,请坚持使用+运算符。与简单的sum相比,a + b函数会增加一些噪音和较小的开销。

答案 1 :(得分:1)

sum是计算可迭代总和的函数;如果你想要2个元素的总和,只需在第一种情况下使用+,或者将ab放在可迭代中(例如:元组:(a, b)

答案 2 :(得分:1)

使用地图:

>>> A = [10, 25, 40]
>>> B = [1, 15, 20]
>>> map(sum, zip(A,B))
[11, 40, 60]

使用列表理解:

>>> [sum(x) for x in zip(A,B)]
[11, 40, 60]

答案 3 :(得分:1)

zip获取iterables并返回一个包含i个元素的元组的可迭代元素。在您的情况下,这相当于

zip(A,B) -> [(10,1), (25,15), (40,20)]    

写作

[  ... for (a,b) in zip(A,B)]

您正在将元组解压缩为名为ab的两个绑定变量。现在abint,因为AB的元素是整数。使用加号运算符将这两个整数添加到一起或

[ sum(tup) for tup in zip(A,B)]

如果你想在没有明确拆包的情况下对整个元组求和。