9

我有一个二进制字符串说'01110000',我想在不写forloop的情况下返回前面的前导零的数量。有谁知道如何做到这一点?如果字符串立即以 '1' 开头,最好也返回 0

4

8 回答 8

11

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

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

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

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

zeroes = (input+'1').index('1')
于 2013-01-24T20:21:28.863 回答
9

一个简单的单行:

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

这会将字符串划分为直到第一个 '1' 和之后的所有内容,然后计算前缀的长度。to 的第二个参数split只是一个优化,表示要执行的拆分次数,这意味着函数将在找到第一个“1”后停止,而不是在所有出现时拆分它。x.split('1')[0]如果性能无关紧要,您可以使用。

于 2013-01-24T20:20:52.437 回答
8

这是另一种方式:

In [36]: s = '01110000'

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

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

于 2013-01-24T20:22:54.203 回答
3

我会使用:

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

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

于 2014-04-12T10:04:32.387 回答
3

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

x.find(1)

(如果全为零,将返回 -1;您可能想要也可能不想要这种行为)

于 2013-01-24T20:21:58.297 回答
1

如果您不知道在这种情况下哪个数字会靠近零,即“1”,并且您只想检查是否有前导零,您可以转换为 int 并返回并比较两者。

"0012300" == str(int("0012300"))
于 2021-06-14T06:53:19.773 回答
0

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

于 2020-02-20T04:09:19.793 回答
0

re模块呢?

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

然后a.start()是位置。

于 2016-03-25T08:30:44.060 回答