python 基础级生成器和列表问题

标签 python list generator

<分区>

my_nums =(i*i for i in [1,2,3,4,5])
for k in (my_nums):
    print(k)
GG = list(my_nums)

print(GG)

它打印:

1
4
9
16
25
[]

Process finished with exit code 0

我不明白为什么[]的值是空的(应该是[1,4,9,16,25])?另外,for-loop 是否将生成器值转换为列表?

最佳答案

以下是generator comprehension :

my_nums =(i*i for i in [1,2,3,4,5])

for k in (my_nums):
    print(k)

因此,当您第一次遍历它并打印值时,生成器会打印它可以生成的每个值。 for 循环通过调用 my_nums.next() 并将获得的值分配给 k 来工作,然后打印该值。当引发 StopIteration 异常时,for 循环的迭代停止。

而且,当您在 for 循环之后使用 GG = list(my_nums) 时,您会得到一个空列表,因为生成器已经耗尽并且不再生成任何内容。

如果您想将生成器生成的值存储到列表中,您可以直接按如下方式进行:

my_nums =(i*i for i in [1,2,3,4,5])
GG = list(my_nums) # no for loop for printing it already

尽管如此,我不确定如果您按照上述方式进行操作是否会在性能方面获得任何优势。

关于python 基础级生成器和列表问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37267587/

相关文章:

javascript - 如何创建一个 Javascript 生成器来计算斐波那契数列?

python - django - 无法使用用户凭据登录

python - 如何使用 zip 连接深层嵌套列表的最里面的元素

java - 如何将数组中的某些 File 元素复制到新的 File 数组?

Python:检查对象是否不是 "array-type"

javascript - 如何在javascript中的迭代器生成器中实现递归遍历?

node.js - 哟 Angular 误差?

python - Python 中二维列表中的字符串

python - 如何更改 PyQt standardButtons_ 的文本

Python UDP 数据包永远不会到达