我正在完成家庭作业,我写了下面的代码,这就是我想做的事情:
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'
类型。
答案 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个元素的总和,只需在第一种情况下使用+
,或者将a
和b
放在可迭代中(例如:元组:(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)]
您正在将元组解压缩为名为a
和b
的两个绑定变量。现在a
和b
是int
,因为A
和B
的元素是整数。使用加号运算符将这两个整数添加到一起或
[ sum(tup) for tup in zip(A,B)]
如果你想在没有明确拆包的情况下对整个元组求和。