该程序用于查找模式1(0' s)1 Ex:1001,1001001的重复次数,但是对于较大的长度值会出现运行时错误 请我建议我解决错误
def patternCount(s):
count=0
for i in range(len(s)-1):
if s[i]=='1':
k=i
while s[k+1]=='0':
k=k+1
if s[k+1]=='1':
count+=1
return count
s = input()
result = patternCount(s)
print(result)
答案 0 :(得分:0)
您可以使用现有的库来查找连续的0
组并对其进行计数,而不是使用itertools.groupby
...
>>> s = "10001001011"
>>> sum(1 for k, g in itertools.groupby(s) if k == '0')
3
...或regular expressions
:
>>> len(re.findall('0+', s))
3
但请注意,您当前的计划似乎还会计算empty
个0
组,例如1111
将返回3
。在这种情况下,您可以使用带有0*
的正则表达式和一些lookbehind和lookahead:
>>> len(re.findall('(?<=1)0*(?=1)', s))
4
或者只计算字符串中1
的数量并减去1
,这与当前函数的作用几乎相同,只是稍微不那么复杂(假设string必须以1
)开头和结尾:
>>> s.count('1') - 1
4
根据您最近的评论,以下正则表达式应该有效:(?<=1)0+(?=1)
这会检查一个或多个零0+
的组,其前面都有(?<=1)
,后跟(?=1)
一个。然后只需使用re.findall and
len`来查找和计算这些组。
>>> s = "0110010001jhcz00001000001000000"
>>> re.findall('(?<=1)0+(?=1)', s)
['00', '000', '00000']
>>> len(re.findall('(?<=1)0+(?=1)', s))
3