Comment obtenir les indices d'un tableau trié en Python


Answers

Quelque chose comme suivant:

>>> myList = [1, 2, 3, 100, 5]
>>> [i[0] for i in sorted(enumerate(myList), key=lambda x:x[1])]
[0, 1, 2, 4, 3]

enumerate(myList) vous donne une liste contenant des tuples de (index, value):

[(0, 1), (1, 2), (2, 3), (3, 100), (4, 5)]

Vous triez la liste en la passant à sorted et en spécifiant une fonction pour extraire la clé de tri (le deuxième élément de chaque tuple, c'est le but de lambda .) Enfin, l'index original de chaque élément trié est extrait en utilisant [i[0] for i in ...] compréhension de liste.

Question

J'ai une liste numérique:

myList = [1, 2, 3, 100, 5]

Maintenant, si je trier cette liste pour obtenir [1, 2, 3, 5, 100] . Ce que je veux, ce sont les indices des éléments de la liste originale dans l'ordre trié, ie [0, 1, 2, 4, 3] --- la fonction de tri de MATLAB qui renvoie à la fois les valeurs et les indices.




Si vous ne voulez pas utiliser numpy,

sorted(range(len(seq)), key=seq.__getitem__)

est le plus rapide, comme démontré here .




Les réponses avec enumerate sont gentilles, mais personnellement, je n'aime pas le lambda utilisé pour trier par la valeur. Ce qui suit inverse juste l'index et la valeur, et trie cela. Donc, il faudra d'abord trier par valeur, puis par index.

sorted((e,i) for i,e in enumerate(myList))



Links