求前N个最大(小)元素我们首先先到的方法一定是堆排序,python中提供了内置的heapq模块可以实现堆排序,对外接口直接调用即可。参考了一下萝卜吃土豆的代码。
heapq可以对字典进行排序,基于此,我们求最大N个数及其索引的代码如下:
import heapq
testList = [1,2,3,4,5]
tmp = zip(range(len(testList)), testList)
large5 = heapq.nlargest(5, tmp, key=lambda x:x[1])
print(large5) #Index and value of the largest 5 elements
需要注意的是,堆排属于不稳定排序