3

例如,如果我这样做,str(bin(66))我得到0b1000010,但如果我这样做str(bin(66)).strip("0b"),我得到100001(注意缺少的 '0')。

我想我在滥用 strip 功能。

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 参数是一个字符串,指定 要删除的字符集。如果省略或无,chars 参数默认删除空格。chars参数不是前缀后缀;相反,它的值的所有组合都被剥离

所以,你认为这str.strip会删除前缀"0b",但它不是那样工作的。它只是将'0'and'b'视为两个不同的字符,并将它们从字符串的开头和结尾删除。同样的事情适用于两者str.rstripstr.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 建议的解决方案以外的二进制数,您还可以尝试slicing

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

format

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