例如,如果我执行此操作str(bin(66))
,我会0b1000010
,但如果我执行此操作str(bin(66)).strip("0b")
,则会获得100001
(请注意缺少的“0”)。
我想我是在滥用剥离功能。
答案 0 :(得分:8)
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'
答案 1 :(得分:6)
来自docs:
str.strip([chars])
返回带有前导和尾随字符的字符串副本 除去。 chars参数是一个指定的字符串 要删除的字符集。如果省略或None,则chars参数默认为删除空格。字符参数是不 a 前缀或后缀;相反,它的所有值组合都被剥离了
所以,您认为str.strip
会删除前缀"0b"
,但它不会那样工作。它只是将'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建议的解决方案之外的二进制数字,您还可以尝试slicing
:
>>> str(bin(66))[2:]
'1000010'
或format
:
>>> format(66, 'b')
'1000010'