ComparaisonComparaisons

sort() vs sorted()

list.sort() trie la liste en place et renvoie None ; sorted() renvoie une nouvelle liste triée depuis toute collection, sans modifier l’original.

Sur cette page

Comparaison point par point

#

Exemple

#
Python
scores = [72, 95, 64, 88]
scores.sort()
print(scores)

names = ("Emma", "léa", "Lucas")
print(sorted(names, key=str.lower))
print(names)
Résultatrésultat enregistré, vous pouvez le vérifier
[64, 72, 88, 95]
['Emma', 'Lucas', 'léa']
('Emma', 'léa', 'Lucas')

Définition et utilisation

#

Les deux servent à trier et acceptent les mêmes paramètres : key avec une fonction qui calcule la clé, et reverse=True pour l’ordre décroissant. Le tri est stable dans les deux cas : les éléments de clés égales conservent leur ordre relatif.

Elles diffèrent par ce qui arrive aux données. La méthode sort() modifie la liste en place et renvoie None, donc l’écriture my_list = my_list.sort() remplacerait la liste par None. Elle ne fonctionne que sur les listes. La fonction sorted() crée une nouvelle liste et la renvoie, sans toucher à l’original, et elle accepte n’importe quel objet itérable : liste, tuple, ensemble ou chaîne.

Quand l’ordre d’origine n’est plus nécessaire et que vous triez une liste, sort() est un peu plus rapide, car elle ne crée pas de nouvelle liste. Quand vous voulez garder l’original, que vous triez autre chose qu’une liste, ou que vous avez besoin du résultat dans la même expression, par exemple dans une boucle for ou un argument de fonction, utilisez sorted().

Syntaxe

#
Syntaxe
list.sort(key=None, reverse=False)
sorted(iterable, key=None, reverse=False)

Plus d’exemples

#
sort() renvoie None, ne réaffectez pas le résultat
Python
tasks = ["c", "a", "b"]
tasks = tasks.sort()
print(tasks)
Résultatrésultat enregistré, vous pouvez le vérifier
None
sorted() fonctionne aussi sur les chaînes
Python
word = "python"
print(sorted(word))
print(sorted(word, reverse=True))
Résultatrésultat enregistré, vous pouvez le vérifier
['h', 'n', 'o', 'p', 't', 'y']
['y', 't', 'p', 'o', 'n', 'h']

Bonnes pratiques

#
  • Si vous voulez trier une liste sans modifier l’original, utilisez sorted(my_list), plutôt que de copier la liste puis d’utiliser sort().
  • Pour trier selon plusieurs critères, donnez un tuple dans key, par ex. key=lambda s: (-s["points"], s["name"]).
  • Les lettres accentuées se trient par défaut après "z". Pour un tri correct, utilisez le module locale ou la bibliothèque PyICU.

Entrées associées

#

Vous voyez une erreur ou il manque un exemple ? Écrivez-nous.