ProgrammationDéveloppeur Python

Comment fonctionne la fonction sorted() en Python, en quoi diffère-t-elle de la méthode sort() des listes, quels sont les nuances à prendre en compte lors de l'utilisation de la clé key et du paramètre reverse ?

Réussissez les entretiens avec l'assistant IA Hintsage

Réponse.

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.
  • Le paramètre 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 :

  • sorted() retourne toujours une nouvelle liste, sans toucher à la source
  • sort() ne fonctionne qu'avec la liste elle-même, ne retourne pas un nouvel objet
  • l'option key peut être n'importe quelle fonction retournant des valeurs à comparer

Questions pièges.

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).

Erreurs typiques et anti-patterns

  • Utiliser sort(), en s'attendant à une nouvelle liste triée
  • Essayer de trier un objet immuable avec la méthode sort()
  • Fournir à key une fonction retournant des valeurs de types hétérogènes

Exemple de la vie réelle

Cas négatif

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 :

  • Modifie la liste sur place (économise parfois de la mémoire)

Inconvénients :

  • Retourne None, ce qui casse la logique suivante

Cas positif

Utilisation correcte :

lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']

Avantages :

  • La liste source n'est pas modifiée
  • On obtient le résultat attendu

Inconvénients :

  • Prend de la mémoire supplémentaire pour la nouvelle liste