2010-06-01 116 views
1

我無法編輯或排序列表。我怎樣才能得到這個指數?Python列表中第n個最大項目的索引

+2

這是功課? 「無法編輯或排序列表」似乎相當隨意。 – 2010-06-01 01:46:17

+2

你需要問一個實際的問題。你發佈的任何內容都不是問題。 – 2010-06-01 01:48:25

+0

不,我實現了一個神經網絡,我不能得到一個很好的方法來解析輸出..因爲我是新的python:\ – Daniel 2010-06-01 01:48:27

回答

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] 
+0

那就是我想要讀的 – Daniel 2010-06-01 02:07:18

+0

非常感謝你= D – Daniel 2010-06-01 02:08:01

0

你得到的已經是O(n)的複雜性(max是O(n),因爲是index(),IIRC)。所以,雖然你在技術上只是刪除最大的,如果它不合適,再試一次,你可以可以,你開始進入bubblesort領域的大O。列表上通常有多少項目?

一個選項是QuickSelect,這基本上是一個簡化的QuickSort,但老實說,預先整理列表並不會比你已經有的太慢。

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

+0

@Jim Lewis:是的,這就是爲什麼我指出QuickSelect,它是O(n)。我實際上並不知道python已經有了最大的功能,這指出...用python顯示我的新手:)我的觀點是(如果nlargest不存在),排序列表(O(nlogn))不是會比他已經在做的2xO(n)差很多... – 2010-06-01 02:10:20

相關問題