【问题标题】:TypeError: 'int' object is not iterable, why it's happeningTypeError:'int'对象不可迭代,为什么会发生
【发布时间】:2013-07-12 19:14:18
【问题描述】:
这实际上是三个例子。
>>> 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
但是,第二个和第三个效果很好。
我无法理解这三个语句之间的区别。
【问题讨论】:
标签:
python
int
iterable-unpacking
【解决方案1】:
我知道这太旧了,但对于任何登陆这里的人来说,这是一个简单的可重现示例来说明“int”对象不可迭代”错误。
lst1 =[3,4,5,6]
def square(lst1):
lst2 = []
for num in lst1:
lst2.append(num**2)
return lst2
#print(list(map(square,lst1))) # this will raise ''int' object is not iterable'
print(list(map(square,list(lst1)))) # here making lst1 as list of list fixs the iterable problem i.e lst1 =[[3,4,5,6]]
【解决方案2】:
您正在迭代一个整数而不是一个字符串或序列。
对于result += k*k,仅当 k 是字符串/序列输入时,它才会为真,但如果 k 是数字,则结果将是连续求和。
对于result.append(k*k),无论k是字符串还是数字,结果都是依次相加。
【解决方案3】:
result 是一个列表对象(最初没有条目)。
列表中的+= 运算符基本上与在右侧调用其extend 方法相同。 (有一些细微的区别,这里不相关,但请参阅python2 programming FAQ 了解详细信息。)列表的extend 方法尝试迭代(单个)参数,而int 不可迭代。
(同时,当然,append 方法只是添加了它的(单个)参数,所以效果很好。列表理解在内部是完全不同的,并且是最有效的方法,因为列表构建完成了很多少一些内部大惊小怪。)
【解决方案4】:
列表对象上的就地添加使用可迭代的元素扩展列表。 k*k 不是可迭代的,因此您不能真正将其“添加”到列表中。
您需要将k*k 设为可迭代:
result += [k*k]