发现找到大值的重复次数的问题

时间:2017-06-13 21:26:51

标签: python python-3.x

该程序用于查找模式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)

1 个答案:

答案 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

但请注意,您当前的计划似乎还会计算empty0组,例如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