<分区>
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
是否将生成器值转换为列表?
<分区>
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
是否将生成器值转换为列表?
最佳答案
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/