Storia della domanda:
Sin dall'inizio, il linguaggio Python ha fornito strumenti integrati per ordinare le collezioni. I metodi sort() e la funzione sorted() sono emersi nella seconda versione di Python, ma a partire da Python 2.4, sorted() è stata introdotta come strumento universale per ordinare qualsiasi oggetto iterabile (non solo le liste).
Problema:
Spesso è necessario ordinare i dati secondo diversi criteri e non sempre si vuole modificare l'oggetto originale. I principianti confondono sort() con sorted(), non capiscono dove venga applicato ciascuno e commettono errori con la chiave di ordinamento e l'ordine inverso.
Soluzione:
sorted(iterable, key=None, reverse=False) restituisce sempre un nuovo elenco oggetto, senza modificare l'originale.list.sort(key=None, reverse=False) ordina la lista stessa in loco e restituisce None.key è una funzione che determina secondo quale criterio ordinare.reverse=True inverte l'ordine.Esempio di ordinamento di una lista di stringhe in base alla loro lunghezza, in ordine inverso:
words = ['python', 'is', 'strong', 'language'] sorted_words = sorted(words, key=len, reverse=True) print(sorted_words) # ['language', 'python', 'strong', 'is']
Caratteristiche chiave:
Cosa restituisce il metodo sort()?
Il metodo list.sort() ordina la lista stessa e restituisce sempre None, cosa che spesso viene dimenticata.
lst = [3, 1, 2] res = lst.sort() print(res) # None print(lst) # [1, 2, 3]
Si può ordinare una tupla con il metodo sort()?
No, le tuple sono immutabili e non hanno il metodo .sort(). Per ordinare, usa sorted().
tuple_data = (5,2,3) sorted_tuple = sorted(tuple_data) print(sorted_tuple) # [2, 3, 5]
Cosa succede se in key viene indicata una funzione che restituisce tipi diversi?
Si genera un'eccezione TypeError, se i valori restituiti non sono confrontabili tra di loro (ad esempio, int e str).
Durante il colloquio, viene richiesto di restituire un elenco ordinato per lunghezza, ma il candidato fa:
lst = ['one', 'elephant'] ans = lst.sort(key=len) print(ans) # None
Vantaggi:
Svantaggi:
Uso corretto:
lst = ['one', 'elephant'] ans = sorted(lst, key=len) print(ans) # ['one', 'elephant']
Vantaggi:
Svantaggi: