Python在飞行中排序

don*_*pj2 6 python sorting algorithm

我正在考虑以前没有遇到的问题,我正在尝试确定最有效的算法.

我正在迭代两个列表,使用每对元素来计算我想要排序的值.我的最终目标是获得前20名的成绩.我可以将结果存储在第三个列表中,按绝对值对列表进行排序,然后简单地将前二十个切片,但这并不理想.

由于这些列表有可能变得非常大,我理想情况下只想存储前20个绝对值,在计算新的最高值时逐出旧值.

在python中实现这个的最有效方法是什么?

ars*_*jii 11

看看heapq.nlargest:

heapq.nlargest(n, iterable[, key])

返回一个列表,其中包含iterable定义的数据集中的n个最大元素.key(如果提供)指定一个参数的函数,该函数用于从iterable中的每个元素中提取比较键:相当于:key=str.lowersorted(iterable, key=key, reverse=True)[:n]

  • @ElmoVanKielmo可能你错了.标准算法是你尝试抓住`n`的东西,把它们放在一个堆是最小的根,然后你开始一个循环添加一个,删除最小的,添加另一个,删除最小的等等.当你完成`N`元素你有顶部`n`,内存要求是'O(n)`和性能'O(N log(n))`. (2认同)
  • 请注意,如果n是len(iterable)的很大一部分,则对列表进行排序会更快。 (2认同)