2012-07-26 13 views
25

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

+13

Co próbujesz osiągnąć? – ThiefMaster

+1

To może być używane do czegoś w rodzaju bitmapy. – SJP

+0

Zobacz również http://stackoverflow.com/questions/2147848/how-do-i-represent-and-work-with-n-bit-vectors-in-python - niezdecydowany, aby oznaczyć jako duplikat. – tripleee

Odpowiedz

30
from bitarray import bitarray 

a = bitarray(2**20) 

Możesz sprawdzić więcej informacji na temat tego modułu w http://pypi.python.org/pypi/bitarray/

+1

_bitarray_ nie wydaje się być w standardowym python, ale jest zamiast tego funkcją oferowaną przez _pypy_. – zvezda

+0

Myślę, że masz na myśli * pip * – Uxio

+7

Myślę, że masz na myśli "zawarte w * PyPI *", indeks pakietu Python. : p – Gandaro

21

Moduł bitstring może pomóc:

from bitstring import BitArray 
a = BitArray(6000000) 

To zajmie mniej niż megabajt pamięci i łatwo ustawić , czytać, wycinać i interpretować bitów. W przeciwieństwie do modułu bitarray jest to czysty Python, a także działa w Pythonie 3.

Aby uzyskać więcej informacji, zobacz the documentation.

5

Get moduł bitarray korzystając

pip install bitarray 

Następnie ten kod utworzy tablicę bitowej wielkości 6 milionów,

from bitarray import bitarray 
bit_array = bitarray(6000000) 

można zainicjować wszystkie bity na zero używając

bit_array.setall(0) 

Aby ustawić konkretny bit, powiedz bit nr 25, na 1, zrób to:

bit_array[25]=1 
+1

Z góry zaktualizowałem 'pip', patrz [link] (https://packaging.python.org/installing/) Następnie uruchom' python -m pip install bitarray' na Windowsie. – yW0K5o

5

Ten jednolinijkowy konwertuje bajty na listę wartości bitów Prawda/Fałsz. Może nie być wydajne dla bitów 6M, ale dla małych flag powinno być w porządku 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] 
Powiązane problemy