寻找一个大值的重复次数的问题

2024-09-29 23:20:47 发布

您现在位置:Python中文网/ 问答频道 /正文

这个程序是为了找出模式1(0's)1的重复次数,例如:10011001001,但是对于较大的长度值,得到运行时错误 请告诉我这个错误的解决办法

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)

Tags: in程序forlenifdefcount错误
1条回答
网友
1楼 · 发布于 2024-09-29 23:20:47

与复杂的嵌套循环不同,您可以只使用现有库来查找连续的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,这与当前函数所做的几乎相同,只是以稍微不那么复杂的方式(假设字符串必须以1开头和结尾):

>>> s.count('1') - 1
4

考虑到您最近的评论,下面的正则表达式应该可以工作:(?<=1)0+(?=1)这检查一个或多个零的组0+前面都是(?<=1),后面都是(?=1)后面的一个。然后使用re.findallandlen`来查找和计算这些组

>>> s = "0110010001jhcz00001000001000000"
>>> re.findall('(?<=1)0+(?=1)', s)
['00', '000', '00000']
>>> len(re.findall('(?<=1)0+(?=1)', s))
3

相关问题 更多 >

    热门问题