1

更新: python-bitstring 3.0.0 のステップには従来の意味があります

私は python bitstringを使用しています。ファイルからロードされた ConstBitArray があり、1 とは異なるステップでスライスを取得したいと考えています。

通常のリストでは、次のようにします。

s = mylist[start:stop:step]

ただし、ビット文字列にはステッピングの奇妙な定義があります。以下を参照してください。

http://packages.python.org/bitstring/slicing.html#stepping-in-slices

誰かがそれを行う方法を知っていますか?

ありがとう

4

2 に答える 2

1

更新:ビット文字列モジュールのステップ インの動作は、バージョン 3 でより従来の意味に変更されました。以下の回答は、ビット文字列バージョン 2 に関するものです。


私はビット文字列モジュールの作成者なので、助けてくれるかもしれません (または、少なくとも説明してください!) がstep乗数を提供するために使用されることに注意してください。これは、バイトまたは他のビットに関して物事を指定する場合に役立ちます倍数 (s[a:b:c]と同じs[a*c:b*c]です)。

あなたが望むと思われる動作については、そのようなコンパクトな構文はありません。あなたがそれを何に必要としているか知りたいです-私はそれの良い使い方を思いつかなかったので、ステップの他の使い方が選ばれたのです. 私が考えることができる最高の同等物は

s = ConstBitArray().join(mylist[i:i+1] for i in range(start, stop, step))

ただし、これは非常に高速ではない可能性があります。

すべてまたは一部のビットが設定/設定解除されていることを確認するだけの場合は、次のようなものを使用できます

mylist.all(True, range(start, stop, step))

また

mylist.any(False, range(start, stop, step))

bitarray別の、おそらくより高速な方法は、スライスにモジュールを使用するように切り替えることです。

import bitarray
s = ConstBitArray(bitarray.bitarray(mylist)[start:stop:step])

このスライシング動作だけが主に必要な場合は、bitarray を使用したほうがよいかもしれませんが、Python 3 ではまだ利用できません。

于 2011-04-18T22:56:15.720 に答える
1

あなたが提供したリンクでは、mylist[start:stop:step]シンタックス シュガーを作成することを選択したことは明らかですmylist[start*step:stop*step]。残念ながら、通常の方法でステップを使用することはできません。

代わりにこれをリストしてみることができます

[mylist[i] for i in range(start,stop,step)]
于 2011-04-18T22:13:47.757 に答える