Python中的内存效率高的替代品可以清空列表并追加?

问题描述 投票:0回答:1

我在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

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

将项目存储在像这样的庞大列表中有什么替代方法?

python list memory bigdata generator
1个回答
0
投票

这里是如何创建一个生成器函数,以一次仅在一个内存中有效地遍历对象的方式:

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)
© www.soinside.com 2019 - 2024. All rights reserved.