如何声明一个非常大的位数组,比如600万位?
答案 0 :(得分:34)
from bitarray import bitarray
a = bitarray(2**20)
查看有关此模块的更多信息
答案 1 :(得分:24)
bitstring模块可能有所帮助:
from bitstring import BitArray
a = BitArray(6000000)
这将占用不到一兆字节的内存,并且可以轻松设置,读取,切片和解释位。与bitarray模块不同,它是纯Python,而且适用于Python 3。
有关详细信息,请参阅the documentation。
答案 2 :(得分:7)
这个单行将字节转换为True / False位值列表。可能不是6M位的性能,但对于小标志,它应该没问题,不需要额外的依赖。
>>> flags = bytes.fromhex(b"beef")
>>> bits = [flags[i//8] & 1 << i%8 != 0 for i in range(len(flags) * 8)]
>>> print(bits)
[False, True, True, True, True, True, False, True, True, True, True, True, False, True, True, True]
答案 3 :(得分:6)
使用
获取bitarray模块pip install bitarray
然后,这段代码将创建一个大小为600万的位数组,
from bitarray import bitarray
bit_array = bitarray(6000000)
您可以使用
将所有位初始化为零bit_array.setall(0)
要将特定位(比如第25位)设置为1,请执行以下操作:
bit_array[25]=1
答案 4 :(得分:1)
很容易
bitarray60000 = 1<<60000
有了它,您可以对您的心脏内容使用bitshift运算符。 例如,位置2设置为True将会是:
bitarray60000 | 1<<2
从位置2获取位
bitarray60000 & 1<<2
我想这个想法很简单。尽管某些操作可能会很棘手。