[英]Error using sum() in a list comprehension
我正在做作業,並編寫了以下代碼,該代碼可以完成我想要的工作:
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'
類型'int'
。
sum
以iterable作為參數 。 您應該執行以下操作:
R = [sum([a,b]) for (a,b) in zip(A,B)]
如果只有兩個元素 ,請堅持使用+
運算符。 與簡單的a + b
(更直觀)相比, sum
函數增加了一些噪聲並減少了開銷。
sum
是計算可迭代項之和的函數; 如果要2個元素的總和,則在第一種情況下只需使用+
,或者將a
和b
放入可迭代的對象(例如,元組: (a, b)
)。
使用地圖:
>>> 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]
zip
接受iterables,並從每個參數返回包含第i
-th個元素的元組的iterable。 在您的情況下,相當於
zip(A,B) -> [(10,1), (25,15), (40,20)]
通過寫
[ ... for (a,b) in zip(A,B)]
您正在將元組拆成兩個綁定的變量,名稱分別為a
和b
。 現在a
和b
是int
因為A
和B
的元素是int。 使用加號運算符將這兩個整數加在一起或
[ sum(tup) for tup in zip(A,B)]
如果要對整個元組求和而不顯式拆包。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.