3

たとえば、これを実行するstr(bin(66))と が得られます0b1000010が、これを実行すると がstr(bin(66)).strip("0b")得られます100001('0' が欠落していることに注意してください)。

私はストリップ機能を誤用していると思います。

4

2 に答える 2

9

strip文字を両側から取り除きます。lstrip左側から文字のみを削除するために使用します。

In [27]: str(bin(66)).strip("0b")
Out[27]: '100001'

In [28]: str(bin(66)).lstrip("0b")
Out[28]: '1000010'

formatまたは、次のメソッドを使用します。

In [38]: '{:b}'.format(66)
Out[38]: '1000010'
于 2013-07-28T13:08:47.053 に答える
6

ドキュメントから:

str.strip([chars])

先頭と末尾の文字が削除された文字列のコピーを返します。chars 引数は、 削除する文字セットを指定する文字列です。省略された場合、または None の場合、chars 引数はデフォルトで空白を削除します。chars 引数は接頭 または接尾辞ではありません。むしろ、その値のすべての組み合わせが削除されます

それで、str.stripプレフィックスが削除されると考えています"0b"が、そのようには機能しません。単純に and を 2 つの異なる文字と見なし'0''b'文字列の先頭と末尾から削除します。str.rstripどちらにも同じことが当てはまり、str.lstrip接頭辞や接尾辞は削除されませんが、個々の文字の組み合わせは削除されます。

例えば:

>>> "0b00101".lstrip("0b")  #just an example case, removes more than just "0b"
'101'

もう一つの例:

>>> strs = "foofoofoobarfoo"
>>> strs.lstrip('fo')
'barfoo'

>>> if strs.startswith('fo'):          #this works fine
       print strs.replace('fo','',1)
...     
ofoofoobarfoo

@unutbuによって提案されたソリューションとは別に2進数については、次を試すこともできますslicing

>>> str(bin(66))[2:]
'1000010'

またはformat:

>>> format(66, 'b')
'1000010'
于 2013-07-28T13:09:51.127 に答える