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