2010-06-01 4 views
1

Je ne peux pas éditer ou trier la liste. Comment puis-je obtenir cet indice?Index du nième élément le plus important dans la liste Python

+2

Est-ce devoir? "ne peut pas éditer ou trier la liste" semble plutôt arbitraire. –

+2

Vous devez poser une question. Rien de ce que vous avez posté est en fait une question. –

+0

non, im mettant en œuvre un réseau de neurones, et je ne peux pas obtenir un bon moyen d'analyser les sorties .. comme je suis nouveau à python: \ – Daniel

Répondre

6

Le module heapq fournit une fonction nlargest qui trouve efficacement les éléments n plus d'une liste:

>>> 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

c'est tout ce que je voulais lire – Daniel

+0

merci beaucoup = D – Daniel

0

Qu'est-ce que vous avez est déjà O (n) en complexité (max est O (n), comme index(), IIRC). Donc, tandis que pourrait techniquement enlever simplement le plus grand si ce n'est pas approprié et essayez à nouveau, vous commencez à entrer dans le territoire de bubbleort en termes de big-O. Combien d'éléments sont généralement sur la liste?

Une option est QuickSelect, ce qui est fondamentalement un QuickSort réduit, mais honnêtement, juste trier la liste à l'avance ne sera pas beaucoup plus lent que ce que vous avez déjà.

Vous pouvez utiliser la fonction sorted() pour renvoyer une nouvelle liste triée si vous ne souhaitez pas modifier l'ordre de la liste d'origine.

+0

@Jim Lewis: oui, c'est pourquoi j'ai pointé QuickSelect, qui est O (n). Je ne savais pas vraiment que python avait déjà une fonction plus importante, ce que sth a fait remarquer ... montre mon nouvel an avec python :) Mon point était (si nlargest n'existait pas), le tri de la liste (O (nlogn)) n'est pas va être bien pire que le 2xO (n) qu'il faisait déjà ... –

Questions connexes