簡體   English   中英

如何在python中找到大於平均值的列表的最長連續子序列

[英]How to find the longest consecutive subsequence of a list greater than mean in python

我想找到一個列表的最長連續子序列的長度,該子序列的值大於其平均值。

例如,考慮下面的例子。

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)

但是,這對於長數據集是無效的,因為我正在創建另一個數組來執行此操作。 我想知道在 python 中是否有更有效的方法來做到這一點。

如果需要,我很樂意提供更多詳細信息。

可以使用filter功能嗎?

例如

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

為了提高程序的速度,您可能需要考慮使用 C/C++/Fortran 庫(例如 numpy),也許是提供 GPU 加速的庫(例如 tensorflow、pytorch)。

使用 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]]

只有標准庫:

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))

它搜索運行高於和低於或等於。 比保持上面的得到它的長度並只打印最大長度的那個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM