web-dev-qa-db-ja.com

Pythonでビットの配列を作成する方法は?

非常に大きなサイズ、たとえば600万ビットのビット配列を宣言するにはどうすればよいですか?

26
zheric
from bitarray import bitarray

a = bitarray(2**20)

http://pypi.python.org/pypi/bitarray/ で、このモジュールに関する詳細情報を確認できます。

34
SJP

bitstring モジュールが役立つ場合があります:

from bitstring import BitArray
a = BitArray(6000000)

これは1メガバイト未満のメモリで済み、ビットの設定、読み取り、スライス、解釈が簡単です。 bitarrayモジュールとは異なり、純粋なPythonであることに加えて、Python 3。

詳細については、 ドキュメント を参照してください。

24
Scott Griffiths

この1ライナーは、バイトをTrue/Falseビット値のリストに変換します。 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]
8
Felix Weis

を使用してbitarrayモジュールを取得する

pip install bitarray

次に、このコードはサイズ600万のビット配列を作成し、

from bitarray import bitarray
bit_array = bitarray(6000000)

以下を使用して、すべてのビットをゼロに初期化できます。

bit_array.setall(0)

特定のビット、たとえばビット番号25を1に設定するには、次のようにします。

bit_array[25]=1   
6
Tarun

非常に簡単に

bitarray60000 = 1<<60000

これにより、ビットシフト演算子を使用して心のコンテンツを作成できます。たとえば、位置2をTrueに設定すると、次のようになります。

bitarray60000 | 1<<2

位置2からビットを取得する

bitarray60000 & 1<<2

アイデアは非常にシンプルだと思います。いくつかの操作は難しいかもしれませんが。

1
Pavel Hanpari