python中的长索引数组

ina*_*lus 2 python

我试图通过将它们作为布尔数组中的索引来缩短10B顺序整数的内存占用.换句话说,我需要创建一个10,000,000,000个元素的数组,但这很好地进入了"Long"范围.当我尝试引用大于sys.maxint的数组索引时,数组会爆炸:

x = [False] * 10000000000
Traceback (most recent call last):
  File "", line 1, in 
    x = [0] * 10000000000
OverflowError: cannot fit 'long' into an index-sized integer

我能做什么?我似乎无法在网上找到任何有这个问题的人......大概答案是"python无法处理大于2B的数组."

Joh*_*hin 5

使用32位地址空间,任何语言都可能难以处理这样的数组.然后就是你的计算机上有多少真实内存的问题.

如果你想要10B数组元素,每个元素表示true或false,请使用array.array('我',...)...

container = array.array('I', [0]) * ((10000000000 + 31) // 32)
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用通常的屏蔽和移位操作来设置和清除位.

替代方案:

如果只有少量元素是真的,或者只有少量元素是假的,那么你可以使用一组来获得最佳的内存,或者使用dict来方便编程.