gpt4 book ai didi

python - Python 列表中生成器的多种用法

转载 作者:行者123 更新时间:2023-11-28 21:15:44 24 4
gpt4 key购买 nike

基本上,我处于以下情况 - 我生成一个列表,例如

l = [2*x for x in range(10)]

我稍后会多次迭代,例如

for i in l: print i    # 0,2,4,6,8,10,12,14,16,18
for i in l: print i # 0,2,4,6,8,10,12,14,16,18
for i in l: print i # 0,2,4,6,8,10,12,14,16,18

问题是列表太大而无法放入内存,因此我使用它的生成器形式,即:

l = (2*x for x in range(10))

但是,在这个构造之后只有第一次迭代有效:

for i in l: print i    # 0,2,4,6,8,10,12,14,16,18
for i in l: print i #
for i in l: print i #

问题出在哪里?我如何多次迭代它?

最佳答案

你的发电机第一次就耗尽了。您应该每次都重新创建生成器以更新它:

l = (2*x for x in range(10))
for i in l: print i
l = (2*x for x in range(10))
for i in l: print i

(注意:您应该在 python 2 中使用 xrange,因为 range 在内存中创建一个列表)

您还可以创建一个快捷功能来帮助您,甚至是 generator function :

def gen():
for i in range(10):
yield 2 * i

然后:

 for i in gen(): print i
for i in gen(): print i

关于python - Python 列表中生成器的多种用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29715120/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com