Python ha due tipi di specie: una sorta metodo (o "funzione membro ") e una funzione .Il metodo sort opera sui contenuti dell'oggetto denominato - pensatelo come un'azione che l'oggetto sta eseguendo per riordinare se stesso. La funzione di ordinamento è un'operazione sui dati rappresentati da un oggetto e restituisce un nuovo oggetto con gli stessi contenuti in un ordine ordinato.
Dato un elenco di numeri interi di nome l
lista stessa verrà riordinato se chiamiamo l.sort()
:
>>> l = [1, 5, 2341, 467, 213, 123]
>>> l.sort()
>>> l
[1, 5, 123, 213, 467, 2341]
Questo metodo non ha alcun valore di ritorno. Ma cosa succede se proviamo ad assegnare il risultato di l.sort()
?
>>> l = [1, 5, 2341, 467, 213, 123]
>>> r = l.sort()
>>> print(r)
None
r
ora equivale effettivamente a nulla. Questo è uno di quei dettagli strani, un po 'fastidiosi che un programmatore probabilmente dimenticherà dopo un periodo di assenza da Python (motivo per cui sto scrivendo questo, quindi I non dimenticarlo più).
La funzione sorted()
, d'altra parte, non farà di tutto per il contenuto di l
, ma restituirà un nuovo elenco con gli stessi contenuti ordinati come 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]
Essere consapevoli del fatto che la restituito il valore è non un deep copy, in modo da essere cauti circa le operazioni di side-effecty oltre elementi contenuti all'interno della lista, come al solito:
>>> 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]]
non mi th inchiostro è necessario trasformare l'oggetto in una stringa tante volte. Una volta è abbastanza normale ed è più pulito farlo anche nell'input di cleanUp. – Ben
Solo un pensiero sciocco, ma se vuoi una lista di oggetti unici, perché non ti converti in un set? È quindi possibile riconvertirli in un elenco se necessario. 'il set da = set (theList)' e si è fatto, avete solo bisogno di lanciare di nuovo alla lista: 'theList = lista (il set da)' Fatto. Facile. – runlevel0