我试图解决 Think Python 练习10.3
编写一个带有数字列表并返回累计和的函数;也就是说,一个新的列表,其中第i个元素是原始列表中第一个
i + 1
元素的总和。例如,[1, 2, 3]
的累计总和为[1, 3, 6]
。
我使用以下代码获得TypeError
:
def culm_sum(num):
res= []
a = 0
for i in num:
a += i
res += a
return res
当我致电culm_sum([1, 2, 3])
时,我得到了
TypeError: 'int' object is not iterable
谢谢!
答案 0 :(得分:3)
您用于附加到列表的代码不正确:
res += a
取而代之的是
res.append(a)
res += a
有什么问题? Python期望a
可以迭代,并且幕后尝试执行相当于:
for item in a:
res.append(a)
但由于a
不可迭代,因此您获得了TypeError
。
注意我最初认为您的错误位于for i in num:
,因为您的变量命名不佳。听起来它只是一个整数。因为它是一个数字列表,至少使它复数(nums
),以便您的代码的读者不会混淆。 (你通常会帮助的读者是未来你。)
答案 1 :(得分:0)
您尝试执行此操作的是extend
您的列表int
,该列表不可迭代,因此错误。您需要使用append
方法将元素添加到列表中:
res.append(a)
或者,这样做,extend
的正确方法:
res += [a]