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

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

【问题讨论】:

标签: python arrays bit


【解决方案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
      

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

      【讨论】:

        猜你喜欢
        • 2010-12-24
        • 1970-01-01
        • 1970-01-01
        • 2017-10-13
        • 2017-06-20
        • 2020-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多