繁体   English   中英

查找列表中最长的连续正数字符串

[英]Finding the longest string of consecutive positive numbers in a list

我有一系列:

series = [0,2, 1, -2, 0, 0, 2, 3 ,1, 7]

查找连续正数最长字符串长度的最省时方法是什么? 在此示例中,它必须为4([2、3、1、7]的长度)

您可以使用itertools.groupby对正数进行分组,然后使用max查找最长的此类数

>>> from itertools import groupby
>>> max((list(g) for k, g in groupby(series, key=lambda i: i > 0)), key=len)
[2, 3, 1, 7]

pandas解决方案

s=pd.Series(np.sign(np.array(series)))
pd.crosstab(s,s.diff().ne(0).cumsum())
Out[495]: 
col_0  1  2  3  4  5
row_0               
-1     0  0  1  0  0
 0     1  0  0  2  0
 1     0  2  0  0  4

pd.crosstab(s,s.diff().ne(0).cumsum()).max(1)
Out[494]: 
row_0
-1    1
 0    2
 1    4
dtype: int64

最省时的角度来看,很难克服一个简单的循环:

def maxPositiveRun():
    count = 0
    maxVal = 0
    for n in series:
        if n > 0:
            count +=1
            if count > maxVal:
                maxVal = count
        else:
            count = 0
    return maxVal

假设最节省时间的意思是您要运行该功能的时间,而不是理解或编写该功能的时间。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM