Python列表中第n个最大项的索引

时间:2010-06-01 01:45:07

标签: python list

我无法编辑或排序列表。我怎样才能获得该索引?

2 个答案:

答案 0 :(得分:6)

heapq模块提供nlargest函数,可以有效地查找列表中的n个最大元素:

>>> from heapq import nlargest
>>> items = [100, 300, 200, 400]
>>> indexes = [0, 1, 2, 3]
>>> nlargest(2, indexes, key=lambda i: items[i])
[3, 1]

答案 1 :(得分:0)

你所得到的已经是O(n)的复杂性(max是O(n),index(),IIRC)。因此,虽然你可能技术上只是删除最大的,如果它不合适并再试一次,你就开始以big-O的形式进入bubblesort领域。列表中通常有多少项?

一个选项是QuickSelect,它基本上是一个简化的QuickSort,但老实说,只是预先对列表进行排序并不会比你已经慢得多。

如果您不想更改原始列表的顺序,可以使用sorted()函数返回新的排序列表。