从字符串中删除前缀

5
尝试从二进制数的左端删除“0b1”。
以下代码会导致删除整个二进制对象。(不好)
>>> bbn = '0b1000101110100010111010001' #converted bin(2**24+**2^24/11)
>>> aan=bbn.lstrip("0b1")  #Try stripping all left-end junk at once.
>>> print aan    #oops all gone.
''

所以我将.lstrip()拆成了两个步骤:

>>> bbn = '0b1000101110100010111010001' #    Same fraction expqansion
>>> aan=bbn.lstrip("0b")# Had done this before.
>>> print aan    #Extra "1" still there.
'1000101110100010111010001'
>>> aan=aan.lstrip("1")#  If at first you don't succeed...
>>> print aan    #YES!
'000101110100010111010001'

有什么问题吗?

再次感谢您在一个简单的步骤中解决了这个问题。(请参见我的先前问题)


2
阅读文档很有帮助 ;) :chars参数不是前缀;相反,它的所有值的组合都将被剥离。 - Felix Kling
类似于为什么str.lstrip会多去掉一个字符的问题?https://dev59.com/CnI-5IYBdhLWcg3wwbdM - Steven Rumbalski
7个回答

12

strip() 方法用于删除字符串的左右两端的字符,默认情况下会删除所有的空白字符。其中 strip() 方法的参数会被视为一个需要从字符串中删除的字符集合,其默认值为 "所有空白字符"。

你想要:

if strg.startswith("0b1"):
   strg = strg[3:]

为什么第二种情况只有第一个“1”? - Harryooo
@Harryooo:我有一个问题想问你:为什么Python既有lstrip和rstrip,又有一个将它们的功能合并的strip函数? - John Machin

10

不。 Stripping(剥离)会删除传递的序列中的所有字符,而不仅仅是字面序列。如果要删除固定长度,请对字符串进行切片。


例如,"ababbbbbbaaccc".lstrip("ab") => "ccc" - Steven Rumbalski
我有点想到lstrip()是使用字符作为列表,但当我再次惊讶地发现lstrip("1")仅仅只删除了第一个“1”,而不是其它的时。 - Harryooo
1
那是因为左边只有一个“1”。 - Ignacio Vazquez-Abrams

6

0
>>> i = 0b1000101110100010111010001
>>> print(bin(i))
'0b1000101110100010111010001'

>>> print(format(i, '#b'))
'0b1000101110100010111010001'
>>> print(format(i, 'b'))
'1000101110100010111010001'

请参考Python教程中的示例

从标准文档(请参阅函数bin()的标准文档)中得知: bin(x) 将一个整数转换为以“0b”为前缀的二进制字符串。结果是一个有效的Python表达式。如果x不是Python int对象,则必须定义一个index()方法,该方法返回一个整数。以下是一些示例:

>>> bin(3)
'0b11'
>>> bin(-10)
'-0b1010'

如果想要使用前缀“0b”,或者不想使用,您可以使用以下任一方式。

>>> format(14, '#b'), format(14, 'b')
('0b1110', '1110')
>>> f'{14:#b}', f'{14:b}'
('0b1110', '1110')

请参考 format() 获取更多信息。

0
这是 lstrip 的工作方式。它会删除参数中的任何字符,而不一定是整个字符串。在第一个示例中,因为输入只包含那些字符,所以什么也没有留下。

但是为什么第二种情况只有第一个“1”? - Harryooo
@Harryooo,在你的第二个例子中,lstrip("1")会删除左侧的字符,直到遇到不是1的字符为止。如果它以'1111'开头,它将把它们全部删除。 - Mark Ransom

0

Lstrip正在删除字符串中的任何字符。因此,除了最初的0b1之外,它还会删除所有零和所有一。因此,全部都没了!


为什么第二种情况只有第一个“1”? - Harryooo

0

@Harryooo:lstrip 只能从左边开始移除字符。因此,由于第一个 0 前面只有一个 1,它会将其移除。如果数字以 0b11100101... 开头,则调用 a.strip('0b').strip('1') 将删除前三个 1,因此您将得到 00101


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接