我有一个二进制字符串'01110000',我想在不编写forloop的情况下返回前面的前导零数。有没有人知道如何做到这一点?优选地,如果字符串立即以“1”开始,则返回0的方式
答案 0 :(得分:8)
如果你确实确定它是一个“二进制字符串”:
input = '01110000'
zeroes = input.index('1')
更新:除了“领先”零
之外,它会中断处理全零情况的替代形式。
zeroes = (input+'1').index('1')
答案 1 :(得分:7)
简单的单行:
x = '01110000'
leading_zeros = len(x.split('1', 1)[0])
将字符串分区为第一个“1”以及其后的其余部分,然后计算前缀的长度。 split
的第二个参数只是一个优化,表示要执行的拆分数,这意味着函数在找到第一个'1'后停止,而不是在所有出现时拆分它。如果性能无关紧要,您可以使用x.split('1')[0]
。
答案 2 :(得分:4)
这是另一种方式:
In [36]: s = '01110000'
In [37]: len(s) - len(s.lstrip('0'))
Out[37]: 1
它与其他解决方案的不同之处在于它实际上计算前导零而不是找到第一个1
。这使得它更加通用,尽管对于你的具体问题无关紧要。
答案 3 :(得分:3)
如果你知道它只有0或1:
x.find(1)
(如果全部为零,则返回-1;您可能想要也可能不想要这种行为)
答案 4 :(得分:2)
我使用:
s = '00001010'
sum(1 for _ in itertools.takewhile('0'.__eq__, s))
而pythonic,在一般情况下工作,例如在空字符串和非二进制字符串上,并且可以处理任何长度的字符串(甚至是迭代器)。
答案 5 :(得分:1)
如果您不知道零旁边的数字,即在这种情况下是“1”,而您只想检查是否有前导零,您可以转换为 int 并返回并比较两者。>
"0012300" == str(int("0012300"))
答案 6 :(得分:0)
re
模块怎么样?
a = re.search('(?!0)', data)
然后a.start()
就是职位。
答案 7 :(得分:0)
我正在使用has_leading_zero = re.match(r'0\d+', str(data))
作为接受任何数字并将0
视为有效数字而没有前导零的解决方案