Jak utworzyć tablicę bitów w Pythonie?

Jak mogę zadeklarować tablicę bitów o bardzo dużym rozmiarze, powiedzmy 6 milionów bitów?

4 answers

from bitarray import bitarray

a = bitarray(2**20)

Możesz sprawdzić więcej informacji o tym module na http://pypi.python.org/pypi/bitarray/

 32
Author: SJP,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-07-26 12:25:04

Moduł bitstring może pomóc:

from bitstring import BitArray
a = BitArray(6000000)
To zajmie mniej niż megabajt pamięci i jest łatwe do Ustawienia, odczytu, wycinania i interpretacji bitów. W przeciwieństwie do modułu bitarray jest to czysty Python, plus działa dla Pythona 3.

Zobacz dokumentacja aby uzyskać więcej szczegółów.

 23
Author: Scott Griffiths,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-11 21:28:53

Pobierz Moduł bitarray używając

pip install bitarray

Następnie ten kod utworzy tablicę bitów o rozmiarze 6 milionów,

from bitarray import bitarray
bit_array = bitarray(6000000)

Możesz zainicjalizować wszystkie bity do zera używając

bit_array.setall(0)

Aby ustawić konkretny bit, powiedzmy numer bitu 25, na 1, wykonaj następujące czynności:

bit_array[25]=1   
 5
Author: Tarun,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-15 04:33:29

Ten jednowierszowy konwertuje bajty na listę wartości bitów Prawda / Fałsz. Może nie działać dla bitów 6M, ale dla małych flag powinno być dobrze i nie wymaga dodatkowych zależności.

>>> 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]
 5
Author: Felix Weis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-11-14 02:15:01