¿Cómo crear una matriz de bits en Python?

¿Cómo puedo declarar una matriz de bits de un tamaño muy grande, digamos 6 millones de bits?

from bitarray import bitarray a = bitarray(2**20) 

Puede consultar más información sobre este módulo en http://pypi.python.org/pypi/bitarray/

El módulo de cadena de bits puede ayudar:

 from bitstring import BitArray a = BitArray(6000000) 

Esto tomará menos de un megabyte de memoria, y es fácil de configurar, leer, dividir e interpretar bits. A diferencia del módulo bitarray, es puro Python, y además funciona para Python 3.

Consulte la documentación para más detalles.

Este one-liner convierte los bytes en una lista de valores de bit True / False. Puede que no sea eficaz para 6M bits, pero para banderas pequeñas debería estar bien y no necesita dependencias adicionales.

 >>> 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] 

Consigue el módulo bitarray usando

 pip install bitarray 

Entonces, este código creará una matriz de bits de tamaño 6 millones,

 from bitarray import bitarray bit_array = bitarray(6000000) 

Puedes inicializar todos los bits a cero usando

 bit_array.setall(0) 

Para establecer un bit en particular, diga el bit 25, a 1, haga esto:

 bit_array[25]=1 

Muy fácilmente

 bitarray60000 = 1<<60000 

Con eso, puede utilizar el operador de bitshift para el contenido de su corazón. Por ejemplo, la posición 2 configurada como verdadera sería:

 bitarray60000 | 1<<2 

Obteniendo bit de posición 2

 bitarray60000 & 1<<2 

Supongo que la idea es bastante simple. Aunque algunas operaciones pueden ser complicadas.