Tri des listes à l'aide des valeurs correspondantes d'une liste parallèle
Vous avez une liste de chaînes (X) et une liste correspondante d'entiers (Y ). Votre objectif est de trier les chaînes de la liste X en fonction des valeurs de la liste Y. Dans ce cas, le résultat souhaité est :
["a", "d", "h", "b", "c", "e", "i", "f", "g"]
Solution de code la plus courte
Le moyen le plus court d'y parvenir est d'utiliser un liste compréhension avec les fonctions sorted et zip :
[x for _, x in sorted(zip(Y, X))]
Ce code compresse les listes ensemble puis les trie en fonction des premiers éléments (les entiers de la liste Y). Il extrait ensuite les seconds éléments (les chaînes de la liste X) de la liste triée.
Exemple
Considérez les listes :
X = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] Y = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]
Utilisation du code :
Z = [x for _,x in sorted(zip(Y,X))] print(Z) # ["a", "d", "h", "b", "c", "e", "i", "f", "g"]
Général Solution
Une solution plus générale consiste à utiliser la fonction triée avec une fonction clé personnalisée :
[x for _, x in sorted(zip(Y, X), key=lambda pair: pair[0])]
Ici, la fonction clé extrait le premier élément de chaque paire dans le fichier zippé list, vous permettant de trier en fonction des nombres entiers de la liste Y.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!