Skip to main content
 首页 » 编程设计

python之查找列表中最高的 n 个元素及其位置。 Python

2025年05月04日9yyy_WW

最近我被要求编写一些代码来查找列表中最高的 n 个元素并返回值和位置。

你能比这更快(就执行时间而言)吗?

def highest(L, n): 
    return sorted(enumerate(L), reverse=True, key=lambda x: x[1])[:n] 
 
if __name__ == '__main__': 
 
    M = [102, 56, 2355, 3, 25, 78, 19, 25, 1002, -54, 0, 23, -1] 
    r = highest(M,5) 
    print r  #[(2, 2355), (8, 1002), (0, 102), (5, 78), (1, 56)] 

请您参考如下方法:

如果 n 与列表的长度相比较小,heapq.nlargest 应该比对整个列表排序更快。它也更具可读性。

def highest(L, n): 
    return heapq.nlargest(n, enumerate(L), key=operator.itemgetter(1)) 
 
>>> M = [102, 56, 2355, 3, 25, 78, 19, 25, 1002, -54, 0, 23, -1] 
>>> highest(M,5) 
[(2, 2355), (8, 1002), (0, 102), (5, 78), (1, 56)] 

这将在 O(N + nlogn) 中工作,其中 N 是列表的长度,n 是要返回的项目数,而不是 O( NlogN) 进行排序。