栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

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

array.array
具有非常快
fromfile
tofile
方式,方便数据的来回移动。

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

import os# no more than 100 million items in memory at a timeMAXINMEM = 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
,等等),但如果
pop
append
确实是你所需要的这应有助于。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/624773.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号