2010-11-10 80 views
4

尝试去除二进制数字左端的“0b1”。这是Python 2.7中的一个错误吗?

以下代码导致剥离所有二进制对象。 (不好)

>>> 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

[阅读文档帮助](http://docs.python.org/library/stdtypes.html#str.lstrip);):*字符参数不是一个前缀;相反,它的值的所有组合都被剥离。* – 2010-11-10 20:59:30

+0

类似于str.lstrip为什么会剥去一个额外的字符? http://stackoverflow.com/questions/1687171/why-does-str-lstrip-strips-an-extra-character – 2010-11-10 21:08:44

回答

13

该strip家族将该arg视为要删除字符的集合。默认设置是“所有空白字符”。

你想:

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

是的,但为什么只有第二种情况下的第一个“1”? – Harryooo 2010-11-10 23:07:06

+0

@Harryooo:对你来说一个问题:为什么Python既有lstrip又有rstrip,还有一个结合了lstrip和rstrip功能的strip? – 2010-11-11 01:04:27

12

编号剥离将删除传递序列中的所有字符,而不仅仅是字面序列。如果要删除固定长度,请切下该字符串。

+0

例如,'“ababbbbbbaaccc”.lstrip(“ab”)=>“ccc”' – 2010-11-10 20:59:36

+0

I有人认为lstrip()使用char作为列表,但当lstrip(“1”)只消除了第一个“1”而没有其他时,我再次感到惊讶。 – Harryooo 2010-11-10 23:04:55

+1

这是因为左侧只有一个'1'。 – 2010-11-10 23:15:39

0

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

+0

是的,但为什么只有第二种情况下的第一个“1”? – Harryooo 2010-11-10 23:05:51

+0

@Harryooo,在你的第二个例子中'lstrip(“1”)'删除左边的字符,直到达到不是'1'的东西。如果它是以“1111”开始的话,它将会删除所有这些。 – 2010-11-11 03:34:25

0

Lstrip被移除任何字符串中的字符。所以,以及最初的0b1,它将删除所有的零和全部的零。因此它全部消失了!

+0

是的,但为什么只有第二种情况下的第一个“1”? – Harryooo 2010-11-10 23:06:40

0

@Harryooo:lstrip只会将字符从左手边移开。所以,因为在第一个0之前只有一个1,所以它消除了这一点。如果号码开始0b11100101...,则拨打a.strip('0b').strip('1')将删除前三个号码,因此您将留下00101