TypeError:'int'对象不可迭代,为什么会发生

时间:2013-07-15 01:24:39

标签: python int iterable-unpacking

实际上这是三个例子。

>>> 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

然而,第二个和第三个效果很好。

我无法理解这三个陈述之间的区别。

4 个答案:

答案 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]]