簡體   English   中英

在列表理解中使用sum()時出錯

[英]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個元素的總和,則在第一種情況下只需使用+ ,或者將ab放入可迭代的對象(例如,元組: (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)]

您正在將元組拆成兩個綁定的變量,名稱分別為ab 現在abint因為AB的元素是int。 使用加號運算符將這兩個整數加在一起或

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

如果要對整個元組求和而不顯式拆包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM