【问题标题】:Python: TypeError: 'int' object is not iterable(Think Python 10.3)Python:TypeError:'int' 对象不可迭代(想想 Python 10.3)
【发布时间】:2016-11-28 16:09:45
【问题描述】:

我正在尝试解决 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

谢谢!

【问题讨论】:

标签: python python-2.7


【解决方案1】:

您用来附加到列表的代码不正确:

res += a

改为

res.append(a)

res += a 有什么问题? Python 期望 a 是可迭代的,并且在幕后尝试执行以下操作:

for item in a:
    res.append(a)

但是由于a 是不可迭代的,所以你得到一个TypeError

注意我最初认为您的错误在 for i in num: 中,因为您的变量命名不当。听起来像是一个整数。由于它是一个数字列表,因此至少将其设为复数 (nums),这样您的代码的读者就不会感到困惑。 (你通常会帮助的读者是未来的你。)

【讨论】:

  • 您好,感谢您的建议和对我帖子的编辑!以前没看到!现在可以了!也感谢您对变量名的建议!
【解决方案2】:

您正在尝试执行此操作的是 extend 您的列表带有 int,这是不可迭代的,因此会出现错误。您需要使用append 方法将元素添加到列表中:

res.append(a)

或者,这样做,extend 的正确方法:

res += [a]

【讨论】:

  • 我没有在回答中提到res += [a],因为当存在另一个简单的替代方案时,不必要地创建临时对象是一个坏习惯。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-03-02
  • 2020-10-28
  • 1970-01-01
  • 2015-04-14
  • 2022-07-01
  • 2015-04-06
相关资源
最近更新 更多