如何在Python中创建位数组?

38

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


13
你想要实现什么目标? - ThiefMaster
5
这可以用于像位图这样的东西。 - SJP
参见https://dev59.com/O3I95IYBdhLWcg3wzRTv -- 犹豫是否标记为重复。 - tripleee
5个回答

45

4
bitarray 不似乎属于标准 Python,而是由 PyPy 提供的一个功能。 - zvezda
2
我认为你的意思是 pip - Uxío
15
我想您的意思是“包含在PyPI中”,即Python包索引。 :p - Gandaro

29

bitstring 模块可能会有所帮助:

from bitstring import BitArray
a = BitArray(6000000)

这将占用少于1兆字节的内存,并且易于设置、读取、切片和解释位。与bitarray模块不同,它是纯Python编写的,并且适用于Python 3。
有关更多详细信息,请参见文档

11

这个一行代码将字节转换为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]

11

非常容易

bitarray60000 = 1<<60000

你可以使用位移运算符,根据你的需求进行操作。例如,将第二位设为 True 的操作如下:

bitarray60000 | 1<<2

获取第2位的比特

bitarray60000 & 1<<2
我想这个想法相当简单,尽管有些操作可能会棘手。

9

使用以下命令获取bitarray模块

pip install bitarray

然后,这段代码将创建一个大小为6百万的位数组,
from bitarray import bitarray
bit_array = bitarray(6000000)

您可以使用以下方法将所有位初始化为零:
bit_array.setall(0)

为了将特定位,例如第25位,设置为1,请执行以下操作:
bit_array[25]=1   

2
我先更新了 pip,请参考链接。然后在Windows上执行 python -m pip install bitarray - yW0K5o

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接