Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 类型错误:';int';对象不可编辑,为什么它';发生什么事了_Python_Int_Iterable Unpacking - Fatal编程技术网

Python 类型错误:';int';对象不可编辑,为什么它';发生什么事了

Python 类型错误:';int';对象不可编辑,为什么它';发生什么事了,python,int,iterable-unpacking,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)] 第一个犯了错误。错误打

这里有三个例子

>>> 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
然而,第二个和第三个效果很好


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

列表对象上的就地添加使用iterable的元素扩展列表
k*k
不是一个iterable,因此您无法将其真正“添加”到列表中

您需要将
k*k
设置为可编辑:

result += [k*k]

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

列表上的
+=
操作符基本上与在右侧的任何位置调用其
extend
方法相同。(有一些细微的差别,此处不相关,但请参阅了解详细信息。)列表的
extend
方法尝试迭代(单个)参数,而
int
不可迭代


(同时,当然,
append
方法只是添加了它的(单个)参数,因此效果很好。列表理解在内部是完全不同的,并且是最有效的方法,因为创建列表的内部麻烦要少得多。)

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

我知道这太旧了,但对于在此登录的任何人来说,这是一个简单的可复制示例,用于说明“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]]
相关的: