为什么Python删除字符串的最后一个字符?

Den*_*neb 2 python strip

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

我想我是在滥用条形功能.

unu*_*tbu 8

strip从两边剥离字符.使用lstrip从左手侧到仅带字符.

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

In [28]: str(bin(66)).lstrip("0b")
Out[28]: '1000010'
Run Code Online (Sandbox Code Playgroud)

或者,只需使用以下format方法:

In [38]: '{:b}'.format(66)
Out[38]: '1000010'
Run Code Online (Sandbox Code Playgroud)

  • @bereal:好吧,可能OP需要二进制表示(`'{:b}'.format(3)`),所以`'0b0011'.lstrip('0b')`返回''11'是正确的解决方案(如`0b0011 == 0b11`). (2认同)

Ash*_*ary 6

来自docs:

str.strip([chars])
Run Code Online (Sandbox Code Playgroud)

返回删除了前导和尾随字符的字符串副本.chars参数是一个字符串,指定 要删除的字符集.如果省略或None,则chars参数默认为删除空格.该字符的说法是不是一个 前缀后缀 ; 相反,它的所有值组合都被剥离了

所以,你认为str.strip会删除前缀"0b",但它不会那样工作.它只考虑'0''b'作为两个不同的字符,并从字符串的开头和结尾删除它们.同样的事情适用于两者str.rstrip,str.lstrip它们不会删除前缀或后缀,而是删除单个字符的组合.

例如:

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

另一个例子:

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

>>> if strs.startswith('fo'):          #this works fine
       print strs.replace('fo','',1)
...     
ofoofoobarfoo
Run Code Online (Sandbox Code Playgroud)

对于除@unutbu建议的解决方案之外的二进制数,您还可以尝试slicing:

>>> str(bin(66))[2:]
'1000010'
Run Code Online (Sandbox Code Playgroud)

或者format:

>>> format(66, 'b')
'1000010'
Run Code Online (Sandbox Code Playgroud)