Python a deux sortes de sortes: une méthode de tri (ou "fonction membre") et une fonction de tri . La méthode sort opère sur le contenu de l'objet nommé - considérez-le comme une action que l'objet prend pour se réorganiser . La fonction de tri est une opération sur les données représentées par un objet et renvoie un nouvel objet avec le même contenu dans un ordre trié.
Étant donné une liste d'entiers nommés, l
la liste elle-même sera réorganisée si nous appelons l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Cette méthode n'a pas de valeur de retour. Mais que faire si nous essayons d'attribuer le résultat de l.sort()
?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
maintenant équivaut à rien. C'est l'un de ces détails étranges et quelque peu ennuyeux qu'un programmeur est susceptible d'oublier après une période d'absence de Python (c'est pourquoi j'écris ceci, donc je n'oublie pas à nouveau).
La fonction sorted()
, par contre, ne fera rien sur le contenu de l
, mais renverra une nouvelle liste triée avec le même contenu que l
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = sorted(l)
>>> l
[1, 5, 2341, 467, 213, 123]
>>> r
[1, 5, 123, 213, 467, 2341]
Sachez que la valeur renvoyée n'est pas une copie complète, soyez donc prudent avec les opérations à effet secondaire sur les éléments contenus dans la liste comme d'habitude:
>>> spam = [8, 2, 4, 7]
>>> eggs = [3, 1, 4, 5]
>>> l = [spam, eggs]
>>> r = sorted(l)
>>> l
[[8, 2, 4, 7], [3, 1, 4, 5]]
>>> r
[[3, 1, 4, 5], [8, 2, 4, 7]]
>>> spam.sort()
>>> eggs.sort()
>>> l
[[2, 4, 7, 8], [1, 3, 4, 5]]
>>> r
[[1, 3, 4, 5], [2, 4, 7, 8]]