How to create an array of bits in Python?

后端 未结 5 1251
无人及你
无人及你 2020-12-08 10:10

How can I declare a bit array of a very large size, say 6 million bits?

相关标签:
5条回答
  • 2020-12-08 10:21

    Get the bitarray module using

    pip install bitarray
    

    Then, this code will create a bit array of size 6 million,

    from bitarray import bitarray
    bit_array = bitarray(6000000)
    

    You can initialize all the bits to zero using

    bit_array.setall(0)
    

    To set a particular bit, say bit number 25, to 1, do this:

    bit_array[25]=1   
    
    0 讨论(0)
  • 2020-12-08 10:22

    The bitstring module may help:

    from bitstring import BitArray
    a = BitArray(6000000)
    

    This will take less than a megabyte of memory, and it's easy to set, read, slice and interpret bits. Unlike the bitarray module it's pure Python, plus it works for Python 3.

    See the documentation for more details.

    0 讨论(0)
  • 2020-12-08 10:31
    from bitarray import bitarray
    
    a = bitarray(2**20)
    

    You can check out more info about this module at http://pypi.python.org/pypi/bitarray/

    0 讨论(0)
  • 2020-12-08 10:34

    Quite easily

    bitarray60000 = 1<<60000
    

    With that, you can use bitshift operator to your heart content. For instance, position 2 set True would be:

    bitarray60000 | 1<<2
    

    Getting bit from position 2

    bitarray60000 & 1<<2
    

    I guess the idea is quite simple. Though some operations might be tricky.

    0 讨论(0)
  • 2020-12-08 10:45

    This one-liner converts bytes to a list of True/False bit values. Might be not performant for 6M bits but for small flags it should be fine and does not need additional dependencies.

    >>> 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]
    
    0 讨论(0)
提交回复
热议问题