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

但是,第二个和第三个效果很好。

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

4

4 回答 4

8

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

你需要做k*k一个可迭代的:

result += [k*k]
于 2013-07-15T01:27:44.533 回答
4

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

列表上的运算符基本上与在右侧+=调用其方法相同。extend(有一些细微的区别,这里不相关,但有关详细信息,请参阅python2 编程常见问题解答。)extend列表的方法尝试迭代(单个)参数,并且int不可迭代。

(同时,当然,该append方法只是添加了它的(单个)参数,所以效果很好。列表理解在内部是完全不同的,并且是最有效的方法,因为列表构建是在内部大惊小怪的情况下完成的。 )

于 2013-07-15T01:34:53.390 回答
0

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

于 2015-04-26T15:48:52.987 回答
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]]
于 2018-06-06T21:34:05.547 回答