![](/img/trans.png)
[英]How to return the longest subsequence formed by consecutive numbers in a Python list?
[英]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.