2010-11-10 28 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