python中空列表和追加的内存高效替代方案



我在python中使用了一个相当大的数据集,使用列表的内存效率太低。

伪代码如下所示:

thelist = []
for x in range(N):
value = function_call()
thelist.append(value)
more = separate_function_call()
thelist.append(more)

我采用的标准方法是初始化一个空列表,然后通过函数调用的迭代,再加上一个单独函数调用的输出,将项附加到这个列表中。

我的问题是,这些列表太大了,无法记忆。

通常情况下,这对发电机来说是一个明显的情况,例如

import sys
list_comp = [x ** 2 for x in range(5000) if x % 2 == 0]
gen_exp = (x ** 2 for x in range(5000) if x % 2 == 0)
sys.getsizeof(list_comp)
## 21040
sys.getsizeof(gen_exp)
## 112

然而,我不确定这在上面的例子中是如何工作的,因为除了使用列表之外,我不知道如何在这样的数据结构中存储项目。

在这样一个庞大的列表中存储项目的替代方案是什么?

以下是如何创建生成器函数来有效地迭代一次内存中只有一个对象的方法:

def my_generator(N):
for x in range(N):
yield function_call()
yield another_function_call()
for item in my_generator(1000): # or whatever N
do_stuff(item)

相关内容

  • 没有找到相关文章

最新更新