实际上这是三个例子。
>>> 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
然而,第二个和第三个效果很好。
我无法理解这三个陈述之间的区别。
答案 0 :(得分:8)
列表对象的就地添加使用iterable的元素扩展列表。 k*k
不是可迭代的,因此您无法将其“添加”到列表中。
您需要使k*k
成为可迭代的:
result += [k*k]
答案 1 :(得分:4)
result
是一个列表对象(最初没有条目)。
列表中的+=
运算符与在右侧的任何内容上调用其extend
方法基本相同。 (有一些细微差别,这里不相关,但请参阅python2 programming FAQ了解详细信息。)列表的extend
方法尝试迭代(单个)参数,int
是不可迭代。
(同时,当然,append
方法只是添加了它的(单个)参数,因此工作正常。列表理解在内部完全不同,并且是列表构建完成时最有效的方法更少内部烦恼 - 。
答案 2 :(得分:0)
您正在迭代整数而不是字符串或序列。
对于result += k*k
,只有当k是字符串/序列输入时,它才是真的,但如果k是数字,则结果将是连续求和。
对于result.append(k*k)
,无论k是字符串还是数字,结果都会顺序添加。
答案 3 :(得分:0)
我知道这太旧了,但是对于那里的任何人来说,这是一个简单的可重复的例子来说明''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]]