2011-02-10 6 views
0

Comment trier une liste d'indices en fonction de ce qu'ils pointent en python?trier la liste des indices

J'ai

indices = list(range(len(mylist))) 

Je veux trier les indices de sorte que si ab dans les indices précède puis mylist[a] > mylist[b].

Répondre

0

Python 2.6+, réponse la plus élégante:

indices.sort(key = lambda x:mylist[x], reverse = True) 
3
indicies.sort(lambda x,y:mylist[x]-mylist[y]) 
+0

Ai-je besoin d'importer quelque chose pour genre de travail? –

+0

Voir ma modification, désolé. Le tri est une fonction de liste – dfb

+0

Aussi, que faire si mylist est une liste de flottants numpy? Ensuite, j'ai besoin d'une fonction de signe de retour entier. Est-ce que int (numpy.sign (...)) 'est le meilleur que je peux faire? –

1

Aussi, permettez-moi d'ajouter l'extrait suivant comme une réponse, en utilisant les informations fournies dans votre question initiale ...

Je veux trier les indices de sorte que si a précède b dans indices puis mylist [a]> mylist [b].

... et les informations supplémentaires que vous avez dans votre commentaire

En outre, si mylist est une liste de flotteurs numpy?

Ensuite, vous pouvez simplement faire:

In [2]: import numpy 

In [3]: a = numpy.asarray([-1, 2.73, 15.827, -8.48, 9, 13, 15, 3.22, 0, -1, 1]) 

In [4]: indices = a.argsort()[::-1] 
Out[4]: array([ 2, 6, 5, 4, 7, 1, 10, 8, 9, 0, 3]) 

In [5]: a[indices] 
Out[5]: 
array([ 15.827, 15. , 13. , 9. , 3.22 , 2.73 , 1. , 
    0. , -1. , -1. , -8.48 ]) 
+0

Intéressant, merci! –