gpt4 book ai didi

python - 如何为一长串整数创建优化的迭代器?

转载 作者:太空狗 更新时间:2023-10-29 21:59:13 24 4
gpt4 key购买 nike

假设我有一个非常大的整数列表,它占用了大量的内存。如果列表的整数以偶数递增,我就可以轻松地将列表表示为一个相对不占用内存的迭代器。但是对于更复杂的模式,将此列表表示为迭代器将变得更加困难。

有没有可以分析整数列表并返回“优化”迭代器的 Python 包?或者我可以研究实现此目标的方法?

最佳答案

我的概念证明,使用 lzma库 ( backport for python 2 ) 压缩到内存。您可以使用磁盘上的文件代替内存缓冲区:

import io
import random
import struct
import sys

from backports import lzma

# Create array of integers with some duplicates
data = []
for i in xrange(0, 2000):
data += [random.randint(-sys.maxint, sys.maxint)] * random.randint(0, 500)

print('Uncompressed: {}'.format(len(data)))
buff = io.BytesIO()

fmt = 'i' # check https://docs.python.org/3/library/struct.html#format-characters
lzma_writer = lzma.LZMAFile(buff, 'wb')
for i in data:
lzma_writer.write(struct.pack(fmt, i))
lzma_writer.close()
print('Compressed: {}'.format(len(buff.getvalue())))

buff.seek(0)
lzma_reader = lzma.LZMAFile(buff, 'rb')

size_of = struct.calcsize(fmt)


def generate():
r = lzma_reader.read(size_of)
while len(r) != 0:
yield struct.unpack(fmt, r)[0]
r = lzma_reader.read(size_of)


# Test if it is same array
res = list(generate())
print res == data

结果:

Uncompressed: 496225
Compressed: 11568
True

关于python - 如何为一长串整数创建优化的迭代器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43691131/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com