Trier la liste par une autre liste en Python

Shivam Arora 30 janvier 2023
  1. Utilisez les fonctions zip() et sorted() pour trier la liste en fonction d’une autre liste en Python
  2. Utilisez le module NumPy pour trier la liste en fonction d’une autre liste en Python
  3. Utilisez le more_itertools.sort_together pour trier la liste en fonction d’une autre liste en Python
Trier la liste par une autre liste en Python

Généralement, lorsque nous trions des listes, nous le faisons par ordre croissant ou décroissant. Cependant, nous pouvons trier une liste en fonction de l’ordre d’une autre liste en Python.

Nous allons apprendre à trier une liste donnée en fonction des valeurs d’une autre liste dans cet article.

Utilisez les fonctions zip() et sorted() pour trier la liste en fonction d’une autre liste en Python

Dans cette méthode, nous allons utiliser la fonction zip() pour créer un troisième objet en combinant les deux listes données, la première qui doit être triée et la seconde dont dépend le tri.

On peut alors utiliser la fonction sorted(), qui extrait les premiers éléments de chaque paire des listes données de la liste triée et zippée.

A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
B = [0, 1, 1, 0, 1, 2, 2, 0, 1]
result_list = [i for _, i in sorted(zip(B, A))]
print(result_list)

Production:

['r', 'u', 'y', 's', 't', 'v', 'z', 'w', 'x']

Utilisez le module NumPy pour trier la liste en fonction d’une autre liste en Python

Dans cette méthode, nous convertissons les listes en tableaux NumPy puis appliquons l’algorithme de tri aux listes. Nous trions le tableau dont dépend le tri à l’aide de la fonction argsort(), puis utilisons ces valeurs pour filtrer le deuxième tableau.

Voir l’exemple suivant.

import numpy

A = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
B = [0, 1, 1, 0, 1, 2, 2, 0, 1]

A = numpy.array(A)
B = numpy.array(B)
inds = B.argsort()
sorted_a = A[B]
print(sorted_a)

Production:

['r' 's' 's' 'r' 's' 't' 't' 'r' 's']

Pour obtenir les données finales dans une liste, utilisez la fonction tolist().

Utilisez le more_itertools.sort_together pour trier la liste en fonction d’une autre liste en Python

Le module more_itertools est une extension du module itertools. La fonction sort_together renvoie les itérables d’entrée triés ensemble, avec la liste dans l’argument key_list comme priorité de tri.

Par exemple,

from more_itertools import sort_together

X = ["r", "s", "t", "u", "v", "w", "x", "y", "z"]
Y = [0, 1, 1, 0, 1, 2, 2, 0, 1]
s = sort_together([Y, X])[1]
print(list(s))

Production:

['r', 'u', 'y', 's', 't', 'v', 'z', 'w', 'x']

Nous devons utiliser la fonction list() pour obtenir le résultat final sous forme de liste.

Article connexe - Python List