实际上,这里有三个例子。
>>> 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
然而,第二个和第三个工作得很好。
我无法理解这三种说法之间的区别。
发布于 2013-07-15 09:27:45
list对象上的就地添加将使用iterable的元素扩展列表。k*k
不是可迭代的,所以您不能真正地将它“添加”到列表中。
你需要让k*k
成为一个可迭代的:
result += [k*k]
发布于 2013-07-15 09:34:53
result
是一个列表对象(最初没有条目)。
列表上的+=
操作符基本上等同于在右侧调用它的extend
方法。(有一些细微的差异,这里不相关,但请参阅python2 programming FAQ了解详细信息。)list的extend
方法试图迭代(单个)参数,而int
是不可迭代的。
(当然,同时,append
方法只添加了它的(单个)参数,所以它工作得很好。列表理解在内部是非常不同的,并且是最有效的方法,因为列表构建是以更少的内部大惊小怪来完成的。)
发布于 2015-04-26 23:48:53
您正在迭代一个整数,而不是一个字符串或序列。对于result += k*k
,只有当k是字符串/序列输入时,它才是真的,但如果k是一个数字,则结果将是连续求和。对于result.append(k*k)
,无论k是字符串还是数字,result都会按顺序进行加法运算。
https://stackoverflow.com/questions/17645500
复制相似问题