J'ai tapé sur ce site pendant un certain temps, mais c'est ma toute première question. Alors allez-y doucement avec moi.

En python, je veux prendre une liste de nombres et générer un index trié dans cette liste.

Par exemple: value = [-3 1 4 -1], alors l'index trié (en supposant un tri croissant) doit être = [0 2 3 1]

Comment générer cet index trié? J'ai besoin d'utiliser cet index trié pour modifier une autre liste.

-2
Brian Korsedal 13 avril 2018 à 10:08

3 réponses

Meilleure réponse

Une autre façon de le faire en utilisant Python pur serait la suivante:

values = [-3, 1, 4, -1]

values = [i[0] for i in sorted(enumerate(values), key=lambda i: i[1])]
print(values)

Production:

[0, 3, 1, 2]
0
Vasilis G. 13 avril 2018 à 07:38

Cela se fait avec élégance avec les fonctions de bibliothèque Python standard:

values = [-3, 1, 4, -1]

i_sorted = sorted(range(len(values)), key=lambda i: values[i])
print(i_sorted)

# The next 3 lines rearrange the array to address Drecker's comment
i_order = [None] * len(i_sorted)
for n, k in enumerate(i_sorted):
   i_order[k] = n
print(i_order)

[0, 3, 1, 2]
[0, 2, 3, 1]

Drecker a raison de dire que ma solution n'a pas répondu à la question. J'ai ajouté trois lignes de code pour réorganiser la liste après le tri. Ce n'est plus aussi élégant, mais je ne vois pas de meilleure solution.

1
Paul Cornelius 13 avril 2018 à 09:50

Essayons avec ceci:

import numpy as np
value = [-3, 1, 4, -1]
np.argsort(value)
-1
Jame H 13 avril 2018 à 07:15