从Python中的列表中获取N Min或Max元素的快速方法

Sor*_*ase 6 python sorting

我目前有一个很长的列表,正在使用lambda函数f进行排序.然后我从前五个元素中选择一个随机元素.就像是:

f = lambda x: some_function_of(x, local_variable)
my_list.sort(key=f)
foo = choice(my_list[:4])
Run Code Online (Sandbox Code Playgroud)

根据剖析器,这是我程序中的瓶颈.我怎样才能加快速度?是否有一种快速,内置的方式来检索我想要的元素(理论上不需要对整个列表进行排序).谢谢.

int*_*jay 10

使用heapq.nlargestheapq.nsmallest.

例如:

import heapq

elements = heapq.nsmallest(4, my_list, key=f)
foo = choice(elements)
Run Code Online (Sandbox Code Playgroud)

这将花费O(N + KlogN)时间(其中K是返回的元素的数量,N是列表大小),当K相对于N小时,其比正常排序的O(NlogN)快.