python 找到滿足條件的索引區間(python find the index interval that satisfies the condition)


 

之前寫過一篇 python 列表尋找滿足某個條件的開始索引和結束索引(python find the starting and ending indices of values that satisfy a certain condition in a list) 文章,因在實際項目中,這個算法的執行速度慢,於是我想使用 python 執行效果高的 numpy 來實現相同的功能,於是就研究了一會,出了一版本效果和上面鏈接相同的,但是速度快了許多的算法,分享給大家。

 

 1 def first_and_last_index_fast(li, lower_limit, upper_limit):  2     result = []  3     if type(li) != np.ndarray:  4         li = np.array(li)  5     # 找到滿足條件的索引
 6     index1 = np.where(np.logical_and(li >= lower_limit, li<=upper_limit))[0]  7     if index1.__len__() != 0:  8         # 找到index1差值等於1的索引
 9         index2 = np.where(np.diff(index1) != 1)[0] 10         if index2.__len__() != 0: 11  result.append((index1[0], index1[index2[0]])) 12             temp = [(index1[index2[i]+1], index1[index2[i+1]]) for i in range(index2.__len__()-1)] 13  result.extend(temp) 14             result.append((index1[index2[-1]+1], index1[-1])) 15         else: 16             result.append((index1[0], index1[-1])) 17     return result

 

結果如下:

In [54]: a = [-1, 0, 34, 23, 5, 2, 8, 2, 0, 1, 4, -4, 6] In [55]: first_and_last_index_fast(a, 0, 3) Out[55]: [(1, 1), (5, 5), (7, 9)]

 

大家掌握了以上代碼的用法,就可以把改算法推廣到求等於某個值的區間,或者絕對值等於某個值的區間~

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM