首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >TypeError:“int”对象不可迭代,为什么会发生这种情况?

TypeError:“int”对象不可迭代,为什么会发生这种情况?
EN

Stack Overflow用户
提问于 2013-07-15 09:24:39
回答 4查看 12.4K关注 0票数 2

实际上,这里有三个例子。

>>> result = []
>>> for k in range(10):
>>>    result += k*k

>>> result = []
>>> for k in range(10):
>>>    result.append(k*k)

>>> result = [k*k for k in range(10)]

第一个会出错。错误打印如下

TypeError: 'int' object is not iterable

然而,第二个和第三个工作得很好。

我无法理解这三种说法之间的区别。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-07-15 09:27:45

list对象上的就地添加将使用iterable的元素扩展列表。k*k不是可迭代的,所以您不能真正地将它“添加”到列表中。

你需要让k*k成为一个可迭代的:

result += [k*k]
票数 8
EN

Stack Overflow用户

发布于 2013-07-15 09:34:53

result是一个列表对象(最初没有条目)。

列表上的+=操作符基本上等同于在右侧调用它的extend方法。(有一些细微的差异,这里不相关,但请参阅python2 programming FAQ了解详细信息。)list的extend方法试图迭代(单个)参数,而int是不可迭代的。

(当然,同时,append方法只添加了它的(单个)参数,所以它工作得很好。列表理解在内部是非常不同的,并且是最有效的方法,因为列表构建是以更少的内部大惊小怪来完成的。)

票数 4
EN

Stack Overflow用户

发布于 2015-04-26 23:48:53

您正在迭代一个整数,而不是一个字符串或序列。对于result += k*k,只有当k是字符串/序列输入时,它才是真的,但如果k是一个数字,则结果将是连续求和。对于result.append(k*k),无论k是字符串还是数字,result都会按顺序进行加法运算。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17645500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档