类似的list.append语句返回不同的结果

时间:2017-11-30 13:36:33

标签: python

下面有两个表达式,对我来说基本上是相同的,但是第一行给出了一个内部生成器而不是值的列表,而第二行工作正常。

我只想知道为什么会发生什么是发电机及其使用方式。

newer_list.append([sum(i)] for i in new_list)

for i in new_list:
        newer_list.append([sum(i)])

2 个答案:

答案 0 :(得分:2)

第一个有一个生成器表达式(sum[i] for i in new_list),而第二个只是循环,添加总和。

你可能想要newer_list.extend([sum(i) for i in new_list])之类的东西,其中extend连接列表而不是仅仅附加,整个事情都用括号括起来,所以它是一个列表理解而不是生成器。

答案 1 :(得分:1)

生成器是Python不能将所有内容存储在内存中的一种方式。表达式([sum(i)] for i in new_list)是用于生成列表中的项的公式。为了防止将该列表存储在内存中,它只存储了执行所需的功能,占用的内存较少。

要将生成器转换为列表,您可以执行list([sum(i)] for i in new_list),或者在这种情况下([[sum(i)] for i in new_list])