如何在Python中创建位数组?

时间:2012-07-26 12:21:10

标签: python arrays bit

如何声明一个非常大的位数组,比如600万位?

5 个答案:

答案 0 :(得分:34)

from bitarray import bitarray

a = bitarray(2**20)

您可以在http://pypi.python.org/pypi/bitarray/

查看有关此模块的更多信息

答案 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

我想这个想法很简单。尽管某些操作可能会很棘手。