例如,如果我这样做str(bin(66))
我得到0b1000010
,但如果我这样做str(bin(66)).strip("0b")
,我得到100001
(注意缺少'0')。为什么Python删除字符串的最后一个字符?
我想我滥用strip函数。
例如,如果我这样做str(bin(66))
我得到0b1000010
,但如果我这样做str(bin(66)).strip("0b")
,我得到100001
(注意缺少'0')。为什么Python删除字符串的最后一个字符?
我想我滥用strip函数。
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'
从docs:
str.strip([chars])
返回去除了开头和结尾字符 字符串的副本。 chars参数是一个字符串,用于指定要删除的字符集的 。如果省略或None,则chars参数默认为删除空格。 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'
我刚刚发布'format(66,'b')';) –
例如''0b0011'.lstrip('0b')'返回'11',这几乎不是OP需要的,请参阅Ashwini's响应。 – bereal
@bereal:那么,可能OP需要二进制表示(''{:b}'.format(3)'),所以''0b0011'.lstrip('0b')'返回''11''是正确的解决方案作为'0b0011 == 0b11')。 – Tadeck