Quelle est la différence entre list.sort () et trié (liste) en Python?


Réponse 1:

Du site Web de débordement de pile →

«Sorted () fonctionne sur n'importe quelle liste itérable, pas seulement sur les listes. ... Utilisez list.sort () lorsque vous souhaitez muter la liste, sorted () lorsque vous souhaitez récupérer un nouvel objet trié. Utilisez sorted () lorsque vous souhaitez trier quelque chose qui est un itérable, pas encore une liste. Pour les listes, list.sort () est plus rapide que sorted () car il n'a pas à créer de copie. »


Réponse 2:

Je les utilise toujours comme moyen d'expliquer la différence entre une fonction et une méthode.

sorted () est une fonction intégrée qui prend tout itérable (liste, tuple, dict, chaîne, etc.) et renvoie une nouvelle liste contenant tous les éléments de cet itérable dans l'ordre trié:

>>> trié («buse»)
['a', 'b', 'd', 'r', 'u', 'z', 'z']
>>> triés ('buse aigle faucon balbuzard pêcheur'. split ())
[«buse», «aigle», «faucon», «faucon», «balbuzard pêcheur»]
>>> triés ({'balbuzard pêcheur': 'Pandionidae', 'aigle': 'Accipitridae'})
['aigle', 'balbuzard pêcheur']

list.sort () est une méthode, c'est-à-dire une fonction qui appartient à une classe (dans ce cas, la classe list), et trie une liste sur place:

>>> birds_of_prey = 'buse aigle faucon balbuzard pêcheur' .split ()
>>> birds_of_prey
[«aigle», «faucon», «buse», «balbuzard pêcheur», «faucon»]
>>> birds_of_prey.sort ()
>>> birds_of_prey
[«buse», «aigle», «faucon», «faucon», «balbuzard pêcheur»]

En Python, si vous souhaitez modifier un objet, vous devez appeler une méthode sur cet objet. Une fonction (intégrée) ne peut jamais modifier un objet.

EDIT: Jeremy Stafford m'a rappelé pourquoi on devrait dire rarement, plutôt que jamais. Les fonctions intégrées setattr () et delattr () peuvent changer un objet:

>>> chose de classe:
...     passer
...
>>> t = Chose ()
>>> setattr (t, 'foo', 'bar')
>>> t.foo
'bar'
>>> delattr (t, 'foo')
>>> t.foo
Traceback (dernier appel le plus récent):
  Fichier "", ligne 1, dans 
AttributeError: l'objet 'Thing' n'a pas d'attribut 'foo'

Pour récapituler, .sort () peut modifier une liste (sauf si elle est triée pour commencer, dans laquelle elle ne fait rien), mais triée ne peut pas changer son argument.

Et, bien sûr, toutes les méthodes ne modifient pas l'objet. Par exemple, .count () renvoie le nombre d'instances d'un élément dans une liste, mais ne modifie jamais la liste.


Réponse 3:
  • La méthode sort () est en place, c'est-à-dire qu'elle modifie la liste d'origine
l = [3, 8, 1, 4]
l.sort ()
imprimer (l) # [1, 3, 4,8]
  • sorted () est une fonction intégrée qui retourne un itérable trié (fonctionne pour les ensembles, les générateurs, les tuples aussi)
l = [3, 8, 1, 4]
# [1, 3, 4,8]
imprimer (trié (l))

# [3, 8, 1,4]
imprimer (l)

Remarque:

  • Utilisez la méthode sort () chaque fois que vous souhaitez modifier la liste d'origine Utilisez sorted () lorsque vous souhaitez conserver l'ordre d'origine de la liste et renvoyer une liste triée () est légèrement plus rapide car aucune copie d'éléments n'implique