如何在Python中创建位数组?

zhe*_*ric 26 python arrays bit

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

SJP*_*SJP 34

from bitarray import bitarray

a = bitarray(2**20)
Run Code Online (Sandbox Code Playgroud)

您可以在http://pypi.python.org/pypi/bitarray/上查看有关此模块的更多信息.

  • 我认为你的意思是"包含在*PyPI*中",Python Package Index.:p (10认同)
  • _bitarray_似乎不在标准python中,而是_pypy_提供的功能. (4认同)
  • 我认为你的意思是*pip* (2认同)

Sco*_*ths 24

位串模块可以帮助:

from bitstring import BitArray
a = BitArray(6000000)
Run Code Online (Sandbox Code Playgroud)

这将占用不到一兆字节的内存,并且可以轻松设置,读取,切片和解释位.与bitarray模块不同,它是纯Python,而且适用于Python 3.

有关详细信息,请参阅文档.


Pav*_*ari 11

很容易

bitarray60000 = 1<<60000
Run Code Online (Sandbox Code Playgroud)

这样,您就可以使用位移运算符来满足您的需求了。例如,位置 2 设置为 True 将是:

bitarray60000 | 1<<2
Run Code Online (Sandbox Code Playgroud)

从位置 2 获取位

bitarray60000 & 1<<2
Run Code Online (Sandbox Code Playgroud)

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


小智 8

这个单行将字节转换为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]
Run Code Online (Sandbox Code Playgroud)


Tar*_*run 6

使用bitarray模块

pip install bitarray
Run Code Online (Sandbox Code Playgroud)

然后,这段代码将创建一个大小为600万的位数组,

from bitarray import bitarray
bit_array = bitarray(6000000)
Run Code Online (Sandbox Code Playgroud)

您可以使用将所有位初始化为零

bit_array.setall(0)
Run Code Online (Sandbox Code Playgroud)

要将特定位(比如第25位)设置为1,请执行以下操作:

bit_array[25]=1   
Run Code Online (Sandbox Code Playgroud)

  • 我预先更新了`pip`,参见[链接](https://packaging.python.org/installing/)然后在Windows上执行`python -m pip install bitarray`。 (2认同)