Historique de la question :
Depuis le début, le langage Python a fourni des outils intégrés pour trier des collections. Les méthodes sort() et la fonction sorted() sont apparues dans la deuxième version de Python, mais à partir de Python 2.4, sorted() a été introduite comme un moyen universel de trier n'importe quel objet itérable (pas seulement des listes).
Problème :
Il est souvent nécessaire de trier des données selon différents critères et il n'est pas toujours souhaitable de changer l'objet source. Les débutants confondent sort() et sorted(), ne comprennent pas où chacun est appliqué, et font des erreurs avec la clé de tri et l'ordre inverse.
Solution :
sorted(objet_itérable, key=None, reverse=False) retourne toujours un nouvel objet-liste, sans modifier l'original.list.sort(key=None, reverse=False) trie la liste elle-même sur place (in-place) et retourne None.key est une fonction qui définit le critère de tri.reverse=True inverse l'ordre.Exemple de tri d'une liste de chaînes selon leur longueur, dans l'ordre inverse :
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
Caractéristiques clés :
Que retourne la méthode sort() ?
La méthode list.sort() trie la liste elle-même et retourne toujours None, ce qui est souvent oublié.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
Peut-on trier un tuple avec sort() ?
Non, les tuples sont immuables, ils n'ont pas de méthode .sort(). Pour trier, utilisez sorted().
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
Que se passe-t-il si on indique une fonction dans key qui retourne différents types ?
Il y aura une exception TypeError si les valeurs retournées ne peuvent pas être comparées entre elles (par exemple, int et str).
Lors d'un entretien, on demande de retourner une liste triée par longueur, mais le candidat fait :
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
Avantages :
Inconvénients :
Utilisation correcte :
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Avantages :
Inconvénients :