2013-01-24 49 views
4

我有一个二进制字符串说'01110000',并且我想返回前面没有写forloop的前导零的数量。有没有人有任何想法如何做到这一点?优选的是还返回0的方式,如果该字符串立即用“1”开始蟒蛇技巧找到字符串中的前导零

+0

“二进制串”实际上并不合理。这是一个恰好代表以base-2编写的数字的文本字符串。 – millimoose

回答

7

一个简单的一行:

x = '01110000' 
leading_zeros = len(x.split('1', 1)[0]) 

此分隔串入一切到第一“1”,其余的之后,然后计算前缀的长度。 split的第二个参数只是一个优化,表示要执行的拆分次数,意味着函数在找到第一个“1”后停止,而不是在所有事件中拆分它。如果性能无关紧要,您可以使用x.split('1')[0]

+0

+1这可能是处理所有零串的最直接的方法。 – millimoose

8

如果你真的确保这是一个“二进制字符串”:

input = '01110000' 
zeroes = input.index('1') 

更新:它打破的时候没有什么,但“龙头”零

另一种形式的处理清一色零情况。

zeroes = (input+'1').index('1') 
+1

+1,这比我的简单:)你可以在字符串后加'1'来确保它总是包含一个。 – l4mpi

3

如果你知道这只是0或1:

x.find(1) 

(将返回-1,如果所有的零,你可能会或可能不希望这种行为)

2

这里是另一种方式:

In [36]: s = '01110000' 

In [37]: len(s) - len(s.lstrip('0')) 
Out[37]: 1 

它不同于其他解决方案,它实际上计数前导零而不是找到第一个1。这使得它更通用一些,但对于您的具体问题无关紧要。

1

我会使用:

s = '00001010' 
sum(1 for _ in itertools.takewhile('0'.__eq__, s)) 

而是Python的,作品在一般情况下,例如在空字符串和非二进制字符串,并且可以处理任何长度的字符串(甚至迭代器)。

0

re模块怎么样?

a = re.search('(?!0)', data) 

then a.start()是位置。