長さが100個以上のバイナリ文字列に対してビット単位の演算を実行したい。私はのようなものを使ってそれらを変換することができることを知っています。末尾に文字で1267650600228229401496703205375L
を印刷します。その後、Pythonのビット単位の演算子を使用しますが、整数に変換することは悪い考えです。これを行う他の方法はありますか?大きなバイナリ文字列のPythonビット単位操作
3
A
答えて
2
私はあなたがいるので、整数を使用しての考えを好きではないことを推測している:
のpython 3バージョン(bin()
の出力の開始時に開始0b
を削除するように注意しながら)基礎となるデータを難読化します。さらに、符号付き整数やエンディアンの微妙な表現はもちろん、 '0'で始まる文字列(整数に変換するときに切り捨てられるため)で作業するのが難しくなります。
ビット配列モジュールを使用してみてください。ピップ:pip install bitarray
と一緒にインストールできます。
from bitarray import bitarray
ba1 = bitarray('0' + '1'*100)
ba2 = bitarray('1' + '0'*100)
len(ba1) # 101
len(ba2) # 101
ba1[0] # False
ba2[0] # True
ba1 | ba2 # bitarray('1111111111.......)
# get your string back
ba1.to01() # "01111111......."
私は効率を発揮できません。しかし、少なくともあなたが働いているものは明らかです。 https://pypi.python.org/pypi/bitarray/0.8.1
0
0
および1
の文字列に対してビット単位の操作を実行しないでください文字列を実際の数に変換し、次に数ビットの処理を一度に行います。 ありと間違って何もありません:
int('1'*128,2) & int('1'*128,2)
は、しかし、あなたはすでに0
sおよび1
秒の文字列を持っていて、文字列の一部のビットごとの操作を制御したい場合。あなたは、次の操作を行うことができます。
l = '1'*1024
r = '1'*1024
print map(lambda x: x[0] & x[1], [(int(l[i:i+64], 2), int(r[i:i+64], 2)) for i in range(0,1024,64)])
これが効果的に左から右へ、文字列の小さな塊(64ビット)上&
を使用しています。
各結果にbin()
を呼び出して、文字列が必要な場合はそれらを連結することができます。
l = '1'*1024
r = '1'*1024
print(list(map(lambda x: x[0] & x[1], [(int(l[i:i+64], 2), int(r[i:i+64], 2)) for i in range(0,1024,64)])))
関連する問題
- 1. Pythonのビット単位の操作
- 2. ビット操作:バイナリ「アレイ」内の単一文字を変更
- 3. ビット単位の操作:FitsBits
- 4. ByteStringのビット単位操作
- 5. ビット単位のC操作
- 6. 文字列バイナリ操作
- 7. JavaScript - 文字列のビット単位XOR?
- 8. 大きな値のビット単位のOR
- 9. Cでのビット単位の操作 - AnyOddBit
- 10. nand MIPSアセンブリーのビット単位操作
- 11. PHPの単純な文字列操作
- 12. Pythonの文字列操作
- 13. Pythonのビット配列操作
- 14. 単純な文字列操作
- 15. Nimrodでは、ビット単位操作の構文は何ですか?
- 16. Python expandtabs文字列操作
- 17. const char * srcからchar * destへのC文字単位の文字列操作
- 18. Java単純なビット操作
- 19. エラー:ビット単位の操作で余分な数字を取得する
- 20. ビット単位のANDと文字列の変数
- 21. のPythonの操作文字列
- 22. Pythonでの文字列操作
- 23. のpython文字列フォーマット操作
- 24. nedtrieでの検索操作の複雑さ(ビット単位のトライ)
- 25. ビット単位の操作と "フラグ"の設定
- 26. Visual BasicからC#へのビット単位操作の変換
- 27. ビットセットとrawビット単位の操作のパフォーマンス
- 28. ビット単位の操作と値の比較
- 29. Androidコンテンツプロバイダーのsqliteビット単位操作の選択
- 30. 配列の要素単位の操作
は、なぜあなたはPythonの整数にビット演算を行うには悪いアイデアだと思います:
ものpython3で
ドキュメント作品? –
100または1000のゼロと1を整数に変換するのは良い考えですか?私の問題ではないbitwiseを使用して、変換は... @MartijnPieters –
Martijn Pietersが言ったように、大きな整数はリンクリスト(opensslの 'BN_ *')のように保持されています。 bignum上の演算子でそれをやったり、それをチョッピングしてループしたりすることは、同じことです。 – grochmal