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

时间:2018-11-29 20:51:48

标签: python pandas

我有一个系列:

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

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

3 个答案:

答案 0 :(得分:4)

您可以使用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]

答案 1 :(得分:2)

来自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

答案 2 :(得分:0)

最省时而言,要克服一个简单的循环将很困难:

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

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