我有一个浮点值列表,例如[-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)))


任何帮助将不胜感激。

最佳答案

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

我将列表转换为一个布尔数组,如果大于0的元素将值指示给该数组,然后将其馈送到itertools.groupby以获取其最大连续值,则位值为TrueFalse

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))


输出值

[-2.4 -1.3 -3.8 -1.9  5.   0.6  2.9  1.9  4.7  3.5  6.9  1.5 -4.2  3.7
  2.1  6.6  7.  -4.6 -4.9]

maximum value is 8

关于python - 在Python列表Python中计算> 0的最长条纹,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53155345/

10-10 05:43