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

标签 python performance list

最近我被要求编写一些代码来查找列表中最高的 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) 进行排序。

关于python - 查找列表中最高的 n 个元素及其位置。 Python,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15136693/

相关文章:

python - 为什么我在使用 IMDbPY 时会收到这么多警告和一些错误?

python - 查找字符串中相同的部分

java - 适用于任何列表和泛型/类型删除方面的方法

python - 将 astropy 表转换为字典列表

python - 将 pandas 数据框转换为 Orange 数据表

python - 由 multiprocessing.Manager() 启动的服务器进程使管道套接字不会立即关闭

c++ - C++ Eigen 库如何比专门的供应商库执行得更好?

java - System.arraycopy 性能

c++ - Haskell 与 C++ 中的简单 π(x)

python - 比较列表中的相邻变量并重新格式化输入