代码之家  ›  专栏  ›  技术社区  ›  Saeed

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

  •  0
  • Saeed  · 技术社区  · 6 年前

    我有一个系列:

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

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

    3 回复  |  直到 6 年前
        1
  •  2
  •   BENY    6 年前

    来自 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
  •  5
  •   Cory Kramer    6 年前

    你可以用 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]
    
        3
  •  0
  •   Mark    6 年前

    依据 最省时 很难打破一个简单的循环:

    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
    

    这是由 最省时 您指的是函数运行的时间,而不是理解或编写函数的时间。