【问题标题】:Count longest streak of >0 in a Python list Python在Python列表Python中计算> 0的最长连续
【发布时间】:2018-11-05 22:19:34
【问题描述】:

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

任何帮助将不胜感激。

【问题讨论】:

  • print([i for i in lst if i > 0]) ?
  • 嘿。欢迎来到 SO。你能添加你想要得到的输出吗?
  • 它只打印列表中大于 0 的值。此列表中可能有奇数 0,而不是它们的总数。如果您查看上面的列表,正确的答案是 8,而这个单线产生 12。

标签: python list


【解决方案1】:

如果您使用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

【讨论】:

  • 使用我一开始想不通的工具按预期工作,也很容易解释。非常感谢!
  • 我有一些熊猫系列,我想从中提取最长的连胜,这对我来说非常有用,谢谢你发布这个...... :)
【解决方案2】:

试试这个:

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)就是答案。

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-04-11
        • 2020-02-19
        • 1970-01-01
        • 2020-12-16
        • 1970-01-01
        • 1970-01-01
        • 2021-08-30
        • 1970-01-01
        相关资源
        最近更新 更多