[英]Python trick in finding leading zeros in string
我有一个二进制字符串说'01110000',我想在不写forloop的情况下返回前面的前导零的数量。 有没有人知道如何做到这一点? 如果字符串立即以“1”开头,最好也返回 0
如果你真的确定它是一个“二进制字符串”:
input = '01110000'
zeroes = input.index('1')
更新:当只有“前导”零时它会中断
处理全零情况的另一种形式。
zeroes = (input+'1').index('1')
一个简单的单线:
x = '01110000'
leading_zeros = len(x.split('1', 1)[0])
这将字符串划分为第一个 '1' 之前的所有内容,然后计算前缀的长度。 split
的第二个参数只是一个优化,表示要执行的拆分次数,这意味着该函数将在找到第一个“1”后停止,而不是在所有出现时拆分它。 如果性能无关紧要,您可以只使用x.split('1')[0]
。
这是另一种方式:
In [36]: s = '01110000'
In [37]: len(s) - len(s.lstrip('0'))
Out[37]: 1
它与其他解决方案的不同之处在于它实际上计算前导零而不是查找第一个1
。 这使它更通用一点,尽管对于您的特定问题并不重要。
如果你知道它只有 0 或 1:
x.find(1)
(如果全为零,将返回 -1;您可能想要也可能不想要这种行为)
我会用:
s = '00001010'
sum(1 for _ in itertools.takewhile('0'.__eq__, s))
相反,pythonic,适用于一般情况,例如空字符串和非二进制字符串,并且可以处理任何长度的字符串(甚至迭代器)。
如果您不知道零旁边是哪个数字,即在这种情况下为“1”,并且您只想检查是否有前导零,您可以转换为 int 并返回并比较两者。
"0012300" == str(int("0012300"))
re
模块怎么样?
a = re.search('(?!0)', data)
然后a.start()
是位置。
我正在使用has_leading_zero = re.match(r'0\\d+', str(data))
作为接受任何数字并将0
视为没有前导零的有效数字的解决方案
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.