我有一个浮点值列表,例如[-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)))
任何帮助将不胜感激。
答案 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)
如果您使用numpy
和itertools
,结果会很快,
我将列表转换为一个布尔数组,如果大于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)