首页 > 解决方案 > 计算从 x 到 x 个周期的连续出现次数

问题描述

我有一个包含 20 个数字的二进制列表:a=[1,1,1,1,0,1,1,0,1,1,1,0,1,1,1,1,1,0,0, 0,1,1,1,0,1,1,0,1,1,0],我的目标是计算每 5 个元素上连续出现 1 的最大次数并将其存储在列表中,在这种情况下输出将是:out= [4,5,3],因为在前 10 个元素上,我们最多有 4 个连续的 1,在后 10 个元素上,我们有 5 个连续的 1,最后一个有 3 个。

我目前的功能如下:

`def count_ones(lista):
   counts=[]
   longest=0
   current=0
   for n in range(0,len(lista),10):
        for i in range(n,n+10):
           if i>= len(lista): break
           if lista[i]==1:
               current+=1
           else:
               longest= max(longest , current)
               current=0
        counts.append(longest)
return (counts)
        `

无法正常工作

标签: pythonlist

解决方案


你可以使用itertools groupby

如果您只想计算 1:

from itertools import groupby

n = 10 # specify the sublist size.
result = [max(len(list(k)) for g, k in groupby(item) if g == 1)
          for item in (a[i:i + n] for i in range(0, len(a), n))]

下面的代码将查找子列表中任何元素连续出现的最大大小。

from itertools import groupby

n = 10 # specify the sublist size.
result = [max(len(list(k)) for _, k in groupby(item))
          for item in (a[i:i + n] for i in range(0, len(a), n))]
print(result) # [4, 5, 3]

推荐阅读