HOWTO · Python

Trier un ensemble en Python

Ce tutoriel montre comment trier un ensemble de valeurs à l'aide de Python

Sur cette page

Un ensemble Python stocke des valeurs uniques, mais ne les conserve pas dans un ordre trié. Pour obtenir les valeurs ordonnées, transmettez l’ensemble à sorted() : cette fonction renvoie une nouvelle liste sans modifier l’ensemble. Utilisez list.sort() lorsque vous avez déjà une liste que vous souhaitez trier sur place ; un ensemble ne possède pas de méthode sort().

Utiliser la fonction sorted() pour trier un ensemble en Python

sorted() accepte un itérable et renvoie une liste. Lorsque les valeurs peuvent être comparées entre elles, l’ordre par défaut est croissant. L’ensemble d’origine reste disponible et inchangé : vous pouvez donc le réutiliser ensuite. L’ordre d’affichage ou d’itération d’un ensemble ne garantit pas qu’il soit trié ; effectuez toujours un tri explicite lorsque l’ordre compte.

Pour un petit ensemble d’entiers, sorted() renvoie une nouvelle liste en ordre croissant. Exécutez cet exemple :
Le code et les libellés ou sorties affichés dans cette section restent en anglais.

values = {5, 3, 1, 4, 2}
ascending = sorted(values)
descending = sorted(values, reverse=True)
words = {"pear", "fig", "watermelon"}
by_length = sorted(words, key=len)
print(ascending)
print(descending)
print(by_length)
[1, 2, 3, 4, 5]
[5, 4, 3, 2, 1]
['fig', 'pear', 'watermelon']

Le paramètre reverse défini sur True inverse l’ordre de comparaison. Le paramètre key prend une fonction qui produit une valeur de comparaison pour chaque élément ; ici, len classe les mots de différentes longueurs selon leur longueur. Lorsque les clés sont égales, l’ordre relatif des éléments suit l’ordre d’itération de l’itérable d’entrée, qui n’est pas garanti pour un ensemble. Si l’ordre en cas d’égalité est important, définissez une clé avec un critère de départage déterministe, par exemple un tuple contenant la longueur et le mot.

Les valeurs doivent pouvoir être comparées entre elles avec la comparaison par défaut, ou la fonction key doit renvoyer des valeurs comparables entre elles. Par exemple, un ensemble peut contenir à la fois des entiers et des chaînes, mais Python 3 ne permet pas de trier directement ces valeurs mélangées. Lorsque cela convient à la tâche, choisissez une clé qui les convertit en une forme cohérente et comparable. Pour des objets personnalisés, utilisez une clé qui extrait l’attribut à comparer, à condition que les valeurs de cet attribut puissent être ordonnées.

Utiliser la méthode sort() pour trier les valeurs d’un ensemble en Python

list.sort() est une méthode des listes, et non des ensembles. Pour l’utiliser sur des valeurs provenant d’un ensemble, convertissez d’abord celui-ci en liste avec list(values), puis appelez sort() sur cette liste. La méthode modifie la liste sur place et renvoie None ; ne réaffectez pas sa valeur de retour à la liste. Le tri de la liste convertie ne modifie pas l’ensemble d’origine.

Utilisez les paramètres key et reverse avec list.sort() comme avec sorted(). Par exemple, items.sort(key=len, reverse=True) trie une liste de chaînes de la plus longue à la plus courte. Cette méthode est utile lorsque vous souhaitez modifier une liste que vous possédez déjà. Si vous avez seulement besoin d’un résultat ordonné et souhaitez conserver l’itérable d’entrée intact, sorted() est généralement plus simple.

Convertir le résultat en ensemble avec set(ordered) conserve les valeurs uniques, mais ne préserve pas l’ordre de tri. Un ensemble ne garantit aucun ordre ; ne vous fiez donc pas à son affichage ni à son ordre d’itération après la conversion. Conservez la liste triée pour toute opération ultérieure qui dépend d’une séquence, comme l’indexation, l’affichage cohérent des valeurs ou leur traitement dans l’ordre.

Conclusion

Utilisez sorted(my_set) pour obtenir une nouvelle liste en ordre croissant, en ajoutant reverse=True pour un ordre décroissant ou key=... pour un critère personnalisé. Utilisez list(my_set), puis list.sort() si vous souhaitez trier une liste sur place. Ni l’affichage d’un ensemble ni la reconversion d’une liste triée en ensemble ne préservent l’ordre de tri ; utilisez une liste dès que l’ordre compte.