Python在字符串中查找前导零的技巧

Python在字符串中查找前导零的技巧,python,Python,我有一个二进制字符串,比如“01110000”,我想返回前面前导零的数量,而不写forloop。有人知道怎么做吗?如果字符串立即以“1”开头,最好也是返回0的一种方法,一个简单的单行程序: x = '01110000' leading_zeros = len(x.split('1', 1)[0]) 这会将字符串划分为第一个“1”之前的所有内容,然后计算前缀的长度。split的第二个参数只是一个优化,表示要执行的拆分次数,这意味着函数在找到第一个“1”后将停止,而不是在所有发生的情况下拆分它。如

我有一个二进制字符串,比如“01110000”,我想返回前面前导零的数量,而不写forloop。有人知道怎么做吗?如果字符串立即以“1”开头,最好也是返回0的一种方法,一个简单的单行程序:

x = '01110000'
leading_zeros = len(x.split('1', 1)[0])
这会将字符串划分为第一个“1”之前的所有内容,然后计算前缀的长度。
split
的第二个参数只是一个优化,表示要执行的拆分次数,这意味着函数在找到第一个“1”后将停止,而不是在所有发生的情况下拆分它。如果性能不重要,您可以使用
x.split('1')[0]

如果您确实确定它是一个“二进制字符串”:

更新:当只有“前导”零时,它会中断

处理全零情况的另一种形式

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

如果您知道它仅为0或1:

x.find(1)
(如果全部为零,则返回-1;您可能希望也可能不希望出现这种情况)

还有另一种方法:

In [36]: s = '01110000'

In [37]: len(s) - len(s.lstrip('0'))
Out[37]: 1
它与其他解决方案的不同之处在于,它实际上计算前导零,而不是查找第一个
1
。这使它变得更一般一些,尽管对于您的具体问题并不重要。

我会使用:

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

pythonic,适用于一般情况,例如空字符串和非二进制字符串,可以处理任意长度的字符串(甚至迭代器)。

关于
re
模块如何

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

然后
a.start()
就是位置。

我使用的
有_leading_zero=re.match(r'0\d+',str(data))
作为一种解决方案,它接受任何数字,并将
0
视为不带前导零的有效数字如果您不知道哪个数字将位于零的旁边,即在这种情况下的“1”,你只需要检查是否有前导零,你可以转换成int和back,然后比较两者

"0012300" == str(int("0012300"))

“二进制字符串”没有真正意义。这是一个文本字符串,正好代表一个用base-2写的数字。+1,比我的更简单:)你可以在字符串后面加上'1',以确保它总是包含一个。+1这可能是处理全零字符串最简单的方法。
"0012300" == str(int("0012300"))