有效地删除lis的第一个元素

2024-09-27 23:00:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在写一个程序,它可以阅读数以百万计的学术论文摘要,并从中收集一些数据。我一直在与内存不足的问题,并缩小了几乎所有我可以。你知道吗

我的下一个想法是在我的程序读完一篇摘要后从内存中删除它。这是我的循环:

for i in range(0, len(abstracts)):
        abstract = abstracts[i]
        name = abstract.id
        self.Xdict[name] = self.Xdata.getData(abstract)
        self.Ydict[name] = self.Ydata.getData(abstract)
        sys.stdout.write("\rScanned Papers: %d" % count) #A visual counter
        sys.stdout.flush()
        count += 1
    sys.stdout.write("\rScanned Papers: %d" % count)
    sys.stdout.flush()

这是我的代码,没有任何从内存中删除项的方法。我目前已尝试使用:

del abstracts[0]  # This is too slow
abstracts = abstracts[1:]   # This is way too slow
abstract = abstracts.pop(0)  # Doesn't seem to free up any memory

任何帮助都太好了。你知道吗

谢谢你!你知道吗


Tags: 内存nameself程序abstractcountstdoutsys
2条回答

如果可能的话,你可以像10 Gb的数据一样拆分你的摘要,先读取1 Gb的数据,然后再处理1 Gb的数据,这样处理起来很容易,不会占用太多的时间和内存

要释放O(1)中与每个摘要相关联的内存,您可以

abstracts[i] = None

在处理它之后;这将只保留一个指针,并且速度非常快。你知道吗

不过,最好不要提前阅读所有的摘要,除非你真的因为问题中没有说明的原因而需要。你知道吗

还要注意,支持从序列两端快速追加/删除元素的Python数据结构是deque,而不是list。你知道吗

相关问题 更多 >

    热门问题