在Python列表Python中计数> 0的最长条纹

时间:2018-11-05 13:27:15

标签: python list

我有一个浮点值列表,例如[-2.4,-1.3,-3.8,-1.9、5.0、0.6、2.9、1.9、4.7、3.5、6.9、1.5,-4.2、3.7、2.1、6.6 ,7.0,-4.6,-4.9]。

我需要做的就是计算最长连续次数值> 0。

尝试通过for循环来完成此操作,但是它仅提供总数,并通过itertools.groupby,但是我仍然只获得值。

for i, x in groupby(mintemps):
    if float(i >= 0):
        print(len(list(x)))

任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:1)

尝试一下:

a = [-2.4, -1.3, -3.8, -1.9, 5.0, 0.6, 2.9, 1.9, 4.7, 3.5, 6.9, 1.5, 3.7, 2.1, 6.6, 7.0, -4.6, -4.9]


l=[]
z=0
for i in a:
    if i > 0:
        z=z+1
    else:
        l.append(z)
        z=0

然后max(l)将是答案。

答案 1 :(得分:0)

您还可以执行以下操作。删除最大值将使您拥有正数序列的所有长度:

np.max([ len(l) for l in ("".join(["p" if i>0 else 'n' for i in a]).split('n')) if l])

答案 2 :(得分:0)

如果您使用numpyitertools,结果会很快,

我将列表转换为一个布尔数组,如果大于0的元素并将其馈送到itertools.groupby以获取其最大连续值,则将指示值,位值为True或{ {1}}。

False

输出

import numpy as np
import itertools
narr=np.array([-2.4, -1.3, -3.8, -1.9, 5.0, 0.6, 2.9, 1.9, 4.7, 3.5, 6.9, 1.5, -4.2, 3.7, 2.1, 6.6, 7.0, -4.6, -4.9])

def max_runs_of_ones(bits):
    maxvalue=0
    for bit, group in itertools.groupby(bits):
        if bit: 
            maxvalue=max(maxvalue,sum(group))
    return maxvalue
print(narr)

print("maximum value is",max_runs_of_ones(narr>0))

答案 3 :(得分:0)

groupby方法采用一个key参数来指定一个函数来计算每个元素的键值。我们可以使用它来创建单线:

max(len(list(g)) for k, g in groupby(mintemps, key=lambda x: x > 0) if k)