gpt4 book ai didi

python - 将 Python 生成器解压为参数——内存效率高吗?

转载 作者:太空宇宙 更新时间:2023-11-03 12:27:49 24 4
gpt4 key购买 nike

假设我有一个用于集合的生​​成器:

def f(n) :
for i in xrange(n) :
yield set(xrange(i) )

>>> for s in f(5) :
print s

set([])
set([0])
set([0, 1])
set([0, 1, 2])
set([0, 1, 2, 3])

现在我想联合它们。我可以创建一个临时集合列表,并将该列表解压缩到 union 的参数中:

>>> set.union( * list( f(5) ) )
set([0, 1, 2, 3])

我也可以将生成器本身交给 union:

>>> set.union( * f(5) )
set([0, 1, 2, 3])

第二种方法是否像第一种方法一样创建完整的临时列表?哪种方法内存效率高?

最佳答案

Python 在将生成器作为参数应用时首先 扩展生成器;在两个选项中,生成器生成的所有值都在调用发生之前加载到内存中。

你可以使用 reduce() function改为调用:

from functools import reduce  # Python 3 forward compatibility

reduce(set.union, f(5))

这会逐个迭代 f(5) 产生的值,而不会先建立它们的序列。

演示:

>>> def f(n):
... for i in xrange(n):
... yield set(xrange(i))
...
>>> reduce(set.union, f(5))
set([0, 1, 2, 3])

关于python - 将 Python 生成器解压为参数——内存效率高吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25345676/

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