如何在 Python 中创建一个位数组?

Posted

技术标签:

【中文标题】如何在 Python 中创建一个位数组?【英文标题】:How to create an array of bits in Python? 【发布时间】:2012-07-25 00:46:56 【问题描述】:

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

【问题讨论】:

你想达到什么目的? 这可以用于位图之类的东西。 另见***.com/questions/2147848/…——犹豫是否标记为重复。 【参考方案1】:
from bitarray import bitarray

a = bitarray(2**20)

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

【讨论】:

bitarray 似乎不在标准 python 中,而是 pypy 提供的功能。 我想你的意思是 pip 我认为您的意思是“包含在 PyPI 中”,即 Python 包索引。 :p【参考方案2】:

bitstring 模块可能会有所帮助:

from bitstring import BitArray
a = BitArray(6000000)

这将占用不到一兆字节的内存,并且很容易设置、读取、切片和解释位。与 bitarray 模块不同,它是纯 Python,而且适用于 Python 3。

更多详情请见the documentation。

【讨论】:

【参考方案3】:

此单行将字节转换为真/假位值列表。对于 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]

【讨论】:

【参考方案4】:

使用获取bitarray模块

pip install bitarray

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

from bitarray import bitarray
bit_array = bitarray(6000000)

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

bit_array.setall(0)

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

bit_array[25]=1   

【讨论】:

我之前更新了pip,见link 然后在Windows上执行python -m pip install bitarray【参考方案5】:

很容易

bitarray60000 = 1<<60000

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

bitarray60000 | 1<<2

从位置 2 获取位

bitarray60000 & 1<<2

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

【讨论】:

以上是关于如何在 Python 中创建一个位数组?的主要内容,如果未能解决你的问题,请参考以下文章

在python中如何创建角色?

如何将数据框中的值分配给在另一个数据框中创建的十分位数?

如何在 Python 中创建具有两列作为元组或 Pandas 数据框的单个变量?

如何在 ldap 中创建“动态组”?

如何在浮点数数组中创建一个由 1 组成的圆圈

如何在 django 中创建组权限