当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《将Python生成器解压缩为参数-内存效率高吗?》经验,为你挑选了1个好方法。

说我有一个发电机sets:

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他们.我可以创建一个临时的集合列表,并将该列表解压缩为参数union:

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

我也可以给发电机本身union:

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

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



1> Martijn Piet..:

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

您可以使用reduce()函数调用:

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])

推荐阅读
TXCWB_523
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有