Нахождение самой длинной строки последовательных положительных чисел в списке - PullRequest
0 голосов
/ 29 ноября 2018

У меня есть серия:

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

Какой самый эффективный способ найти длину самой длинной строки последовательных положительных чисел?В этом примере оно должно быть 4 (длина [2, 3, 1, 7])

Ответы [ 3 ]

0 голосов
/ 30 ноября 2018

Раствор от 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
0 голосов
/ 30 ноября 2018

С точки зрения самое эффективное время будет трудно обойти простой цикл:

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

Это предполагает самое эффективное время вы имеете в виду времядля выполнения функции, а не для того, чтобы понять или написать функцию.

0 голосов
/ 29 ноября 2018

Вы можете использовать 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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...