您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

在内存中保留大列表的替代方法(python)

在内存中保留大列表的替代方法(python)

如果您的“数字”是足够简单的数字(每个最大为4个字节的有符号或无符号整数,或者每个为4或8个字节的浮点数),我建议使用标准库数组模块作为保留数百万个的最佳方法在内存(“虚拟阵列”的“尖端”)中存储一个二进制文件(针对二进制R / W打开),以支持磁盘上其余结构。array.array具有非常快fromfiletofile方式,方便数据的来回移动。

即,基本上,假设无符号长数,例如:

import os

# no more than 100 million items in memory at a time
MAXINMEM = int(1e8)

class bigarray(object):
  def __init__(self):
    self.f = open('afile.dat', 'w+')
    self.a = array.array('L')
  def append(self, n):
    self.a.append(n)
    if len(self.a) > MAXINMEM:
      self.a.tofile(self.f)
      del self.a[:]
  def pop(self):
    if not len(self.a):
      try: self.f.seek(-self.a.itemsize * MAXINMEM, os.SEEK_END)
      except IOError: return self.a.pop()  # ensure normal IndexError &c
      try: self.a.fromfile(self.f, MAXINMEM)
      except EOFError: pass
      self.f.seek(-self.a.itemsize * MAXINMEM, os.SEEK_END)
      self.f.truncate()
    return self.a.pop()

当然你也可以添加其他的方法在必要时(总长度如跟踪,添加extend,等等),但如果popappend确实是你所需要的这应有助于。

python 2022/1/1 18:49:41 有382人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶