2013-09-24 48 views
1

我有這個字符串:11000000101010000000010000000000如何計算結束0的二進制字符串

我想算0首發在後面,直到我打1和停在那裏,確定在的0 S中的總數結束。在這個特殊情況下,它會給我10作爲答案。

任何幫助非常感謝。

回答

5

使用str.rsplit()str.count()

>>> s = '11000000101010000000010000000000' 
>>> len(s.rsplit('1', 1)[-1]) 
10 
+0

完美,這解決了這個問題對我來說。謝謝。 –

+0

@HundurinnNero沒問題:) – TerryA

+0

這是更好地使用'LEN(S)-s.rfind( '1') - 1',對不對? – justhalf

6

您可以使用rindex()得到最後1的索引,然後減去從最大指數(len(s) - 1):

>>> s = '11000000101010000000010000000000' 
>>> len(s) - s.rindex('1') - 1 
10 
+0

好,但是什麼時候它全是零? –

+0

@StevenRumbalski你認爲在這種情況下會有什麼答案?在這種情況下,提出錯誤(rindex會做)似乎最適合我。 – arshajii

+0

我不知道。取決於OP使用的號碼。 OP可能想要返回零或總長度的計數。 –

0

你既可以:

  • 在相應的整數10進行連續分裂拍攝,就好像是在基地10

  • 使用字符串操作來找到最後1,並採取一切後

  • 使用正則表達式來獲得在0年底盡數

  • 找操作轉換爲二進制和兩個執行連續分裂。

1

我知道這個問題已經回答了,但我想我會添加另一種方式,你可以做到這一點。

你可以在字符串和takewhile數字的反向使用itertools.takewhile不是「1」。對所有生成的1應用一個總和,你會得到答案。

>>> test = "11000000101010000000010000000000" 
>>> sum(1 for x in takewhile(lambda i: i != '1', test[::-1])) 
10 
2

這裏是如何在正則表達式中做到這一點,因爲爲什麼不呢!

>>> s = '11000000101010000000010000000000' 
>>> match = re.search('0*$', s) 
>>> match.end() - match.start() 
10 
+0

這是有點我的想法:爲什麼不使用拉姆達和幾個發電機來回答這個問題! – erewok

0
binary_str = "11000000101010000000010000000000" 

import re 

match_obj = re.search(r"0*$", binary_str) 

if match_obj: 
    print len(match_obj.group())