Python,得到列表最小k个数或最大k个数的索引
生活随笔
收集整理的這篇文章主要介紹了
Python,得到列表最小k个数或最大k个数的索引
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
如果是直接得到最小或最大k個數(shù),那么直接排序即可。但是如果要得到索引,那么不能排序,或者你排序時附帶數(shù)據(jù)的下標(biāo)。本文通過兩種方法來展示怎么得到最小k個數(shù)的索引,一種是直接使用min()函數(shù)得到列表的最小值,然后使用index()函數(shù)得到該值的索引,循環(huán)k次即可,很方便且易于理解;另一種則是在排序中附帶數(shù)據(jù)下標(biāo),最終排序結(jié)束,也可得到最小k個數(shù)在原列表的索引。
1. List.index(min(List))
List = [3, -4, 0, 6.4, -1.6, 9.09] Lst = List[:] #對列表進(jìn)行淺復(fù)制,避免后面更改原列表數(shù)據(jù) k = 3 #此處示范得到列表最小3個數(shù)的索引 index_k = [] for i in range(k):index_i = Lst.index(min(Lst)) #得到列表的最小值,并得到該最小值的索引index_k.append(index_i) #記錄最小值索引Lst[index_i] = float('inf') #將遍歷過的列表最小值改為無窮大,下次不再選擇print(index_k) #打印輸出最小3個數(shù)的索引以及原列表的數(shù)據(jù) for i in range(k):print(List[index_k[i]])?在命令行終端執(zhí)行結(jié)果如下圖所示
2. 附帶索引的快速排序?
關(guān)于快排、歸并排序以及選擇排序算法可看我的另外一篇博客?https://blog.csdn.net/yldmkx/article/details/108367734,強(qiáng)烈推薦先理解快排之后,再去理解添加索引的快排算法。
def quicksort(Lp):if len(Lp)<2:return LpL = Lp[:]key = len(L)//2left = -1right = len(L)while left<right:right -= 1 #下一輪開始都需要在上輪的值移動一步,不然又重復(fù)計(jì)算while right>key and L[right][0]>=L[key][0]:right -= 1if right>key: #滿足條件說明while循環(huán)是因?yàn)長[right]<L[key]而跳出,此時需要更新keyL[right], L[key] = L[key], L[right]key = rightleft += 1 #下一輪開始都需要在上輪的值移動一步,不然又重復(fù)計(jì)算while left<key and L[left][0]<=L[key][0]:left += 1if key>left: #滿足條件說明while循環(huán)是因?yàn)長[left]>L[key]而跳出,此時需要更新keyL[left], L[key] = L[key], L[left]key = leftreturn quicksort1(L[:key]) + [L[key]] + quicksort1(L[key+1:])Lit = [3, -4, 0, 6.4, -1.6, 9.09] List = [[Lit[i], i] for i in range(len(Lit))] #將原列表拓展成附帶索引的二維列表 L = quicksort(List) #調(diào)用快排算法 k = 3 #示范尋找最小3個數(shù)的索引 for i in rang(k): #打印列表的k個最小值以及索引print(L[i])執(zhí)行結(jié)果如下圖所示,每一次第一個數(shù)是列表的前k個最小值,第二個數(shù)是該最小值在原列表的索引,和第一種方法結(jié)果一樣
總結(jié)
以上是生活随笔為你收集整理的Python,得到列表最小k个数或最大k个数的索引的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Unity 3D 2019.3.12版本
- 下一篇: Ubuntu16.04下创建工作空间并添