Как найти самую длинную последовательную подпоследовательность в списке больше среднего в python - PullRequest
1 голос
/ 07 января 2020

Я хочу найти длину самой длинной последовательной подпоследовательности списка, значение которой больше среднего.

Например, рассмотрим приведенный ниже пример.

mylist = [0, 6, 25, 20, 15, 8, 15, 6, 0, 6, 0]

Среднее значение из приведенного выше списка составляет 9,181818181818182. Итак, самая длинная последовательная подпоследовательность - это [25,20,15]. Следовательно, длина равна 3.

Я попытался сделать это следующим образом.

mytemp = []
for item in mylist:
    if item > np.mean(mylist).item():
        mytemp.append(1)
    else:
        mytemp.append(0)
print(mytemp)

Однако это неэффективно cinet для длинных наборов данных, так как я создаю другой массив сделать это. Мне интересно, есть ли более эффективный способ сделать это в python.

Я с удовольствием предоставлю более подробную информацию, если это необходимо.

Ответы [ 3 ]

1 голос
/ 07 января 2020

С NumPy массивами и функциями для эффективности -

a = np.array(mylist)
m = np.r_[False,a>a.mean(),False]
idx = np.flatnonzero(m[:-1]!=m[1:])
largest_island_len = (idx[1::2]-idx[::2]).max()

Если вам тоже нужны элементы -

I = (idx[1::2]-idx[::2]).argmax()
elems = a[idx[2*I]:idx[2*I+1]]
1 голос
/ 07 января 2020

Только со стандартными библиотеками:

from itertools import groupby
from statistics import mean
mylist=[0, 6, 25, 20, 15, 8, 15, 6, 0, 6, 0]
m=mean(mylist)
mylist=[tuple(x) for b,x in groupby(mylist,key=lambda x:x>m) if b]
print(max(mylist,key=len))

Это приводит к последовательностям выше и ниже или равно. Придерживаясь вышесказанного, получите длину и напечатайте только ту, которая имеет максимальную длину.

1 голос
/ 07 января 2020

Не могли бы вы использовать функцию filter?

например,

mean = sum(mylist)/len(mylist)
mytemp = filter(lambda x: x > mean, mylist)

Чтобы увеличить скорость вашей программы, вы можете захотеть использовать библиотеку C / C ++ / Fortran ( например, numpy), возможно, тот, который обеспечивает ускорение графического процессора (например, тензорный поток, pytorch).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...