这是Python 2.7中的错误吗?

时间:2010-11-10 20:52:40

标签: python string

尝试从二进制数的左端剥离“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'

这是什么交易?

再次感谢您通过一个简单的步骤解决这个问题。 (见我之前的问题)

7 个答案:

答案 0 :(得分:13)

条形系列将arg视为要删除的设置字符。默认设置为“所有空白字符”。

你想:

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

答案 1 :(得分:12)

没有。剥离会删除传递的序列中的所有字符,而不仅仅是文字序列。如果要删除固定长度,请剪切字符串。

答案 2 :(得分:2)

In Python 3.9,您可以使用ssh.github.com

(实际上,此问题已作为mentioned中基本原理的一部分PEP 616。)

答案 3 :(得分:0)

这是lstrip的工作方式。它会删除参数中任何字符,而不一定是整个字符串。在第一个例子中,由于输入只包含那些字符,所以没有留下任何东西。

答案 4 :(得分:0)

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

答案 5 :(得分:0)

@Harryooo:lstrip只接受左手边的字符。所以,因为在第一个0之前只有一个1,所以它会删除它。如果号码开始为0b11100101...,则调用a.strip('0b').strip('1')会删除前三个号码,因此您将留下00101

答案 6 :(得分:0)

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

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

Example in python tutor

来自标准文档 (See standard documentation for function 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() 了解更多信息。