Python技巧:如何在字符串中查找前导零

11

我有一个二进制字符串,比如'01110000',想要返回前面的零的数量,而不用写for循环。请问有没有办法做到这一点?最好的方法是如果字符串立即以'1'开头,也能返回0。


“二进制字符串”并没有实际意义。它只是一个以二进制方式表示数字的文本字符串。 - millimoose
8个回答

12

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

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

更新:当只有“前导”零时它会出现问题。

一种处理全零情况的替代形式。

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

1
+1,这比我的还要简单 :) 你可以将“1”附加到字符串末尾,以确保它始终包含一个一。 - l4mpi

11

还有一种方法:

In [36]: s = '01110000'

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

与其他解决方案不同的是,它实际上计算了前导的零而不是找到第一个1。这使它变得更加通用,尽管对于您的特定问题无关紧要。

这是我找到的唯一可行的答案,用于查找Markdown行以多少个#开头来表示一个标题 - WinEunuuchs2Unix
我使用了这个解决方案的思路来确定一个随机字符串中是否有前导零。然而,它无法区分'0'中的零作为单个数字(不是前导零)和'0234'中的零作为前导零。两个输入字符串'0'或'0234'都将返回1。 - Jane Lu

9
一个简单的一行代码:
x = '01110000'
leading_zeros = len(x.split('1', 1)[0])

这将字符串分成第一个'1'之前的所有内容和之后的所有内容,然后计算前缀的长度。 split 的第二个参数只是一种优化方式,表示要执行的拆分次数,这意味着函数在找到第一个'1'后就会停止拆分,而不是在所有出现的位置上进行拆分。如果性能不重要,您可以直接使用 x.split('1')[0]


+1 这可能是处理全零字符串最直接的方法。 - millimoose

4

我会使用:

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

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

3

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

x.find(1)

(如果所有数字都是零,将返回-1;您可能希望或不希望这种行为)

2
如果您不知道下一个数字是零,即在这种情况下为“1”,并且只想检查是否存在前导零,则可以将其转换为int,然后再转回来并比较两者。
"0012300" == str(int("0012300"))

0

我正在使用 has_leading_zero = re.match(r'0\d+', str(data)) 作为解决方案,它接受任何数字并将 0 视为一个有效的数字而不是带有前导零的数字


0

关于re模块怎么样?

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

那么a.start()就是位置。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接