Maison >développement back-end >Tutoriel Python >Comment puis-je trier efficacement une liste basée sur plusieurs attributs en Python ?

Comment puis-je trier efficacement une liste basée sur plusieurs attributs en Python ?

DDD
DDDoriginal
2024-12-11 18:02:13355parcourir

How Can I Efficiently Sort a List Based on Multiple Attributes in Python?

Tri de liste multi-attributs

Le tri d'une liste en fonction d'un seul attribut est simple. Cependant, lorsque plusieurs attributs dictent l'ordre de tri, une approche plus complexe est nécessaire.

Considérez la liste de listes suivante :

[[12, 'tall', 'blue', 1],
[2, 'short', 'red', 9],
[4, 'tall', 'blue', 13]]

Tri de cette liste uniquement par « grand » ou « L'attribut short' peut être obtenu en utilisant sorted(s, key = itemgetter(1)). Cependant, si l'ordre de tri doit être basé à la fois sur les attributs de hauteur et de couleur, une solution plus efficace est nécessaire.

Fonctions clés multi-attributs

Pour trier un liste par plusieurs attributs, une fonction clé peut être définie qui renvoie un tuple représentant l'ordre de tri souhaité. Par exemple, la fonction clé suivante trie d'abord par hauteur, puis par couleur :

key = lambda x: (x[1], x[2])

En utilisant cette fonction clé, la liste peut être triée comme suit :

s = sorted(s, key=key)

Alternativement, itemgetter () peut être utilisé pour obtenir le même résultat plus efficacement :

import operator
key = operator.itemgetter(1, 2)

Cette fonction clé est à la fois plus rapide et n'implique pas de fonction Python call.

Tri direct

Enfin, l'approche ci-dessus peut être encore simplifiée en utilisant la méthode sort() au lieu de sorted() et en réaffectant. Cela élimine le besoin de créer une nouvelle liste :

s.sort(key=key)

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn