Come ordinare un elenco in Python (ascendente e discendente)

Scopri come ordinare un elenco in Python utilizzando il metodo sort() e la funzione sorted(). Scopri l'ordinamento delle chiavi personalizzato e gli esempi di ordine inverso.

Prova questa soluzione nell'editor

Panoramica

L'ordinamento dei dati è una delle attività più comuni nella programmazione, sia che tu stia ordinando i profili utente per età, elencando i prodotti per prezzo o organizzando i risultati di ricerca. Python offre due modi integrati e altamente ottimizzati per ordinare gli elenchi: il metodo `list.sort()` e la funzione `sorted()`. Entrambi utilizzano un algoritmo di ordinamento altamente efficiente chiamato Timsort, che viene eseguito con complessità temporale O (N log N).

La differenza fondamentale tra i due è la mutevolezza. Il metodo `list.sort()` ordina l'elenco sul posto, ovvero modifica direttamente l'elenco originale e restituisce "None". La funzione `sorted()`, invece, lascia invariata la lista originale e restituisce una lista ordinata completamente nuova. Questa distinzione è cruciale: usa `sort()` quando vuoi risparmiare memoria e non hai bisogno dell'ordine originale, e usa `sorted()` quando devi mantenere intatto l'elenco originale o quando ordini elementi iterabili non di elenco come tuple o dizionari.

Entrambi i metodi di ordinamento accettano due argomenti facoltativi di parole chiave: "reverse" e "key". L'argomento "inverso" è un valore booleano; impostandolo su "Vero" l'elenco viene ordinato in ordine discendente (inverso). L'argomento "chiave" accetta una funzione applicata a ciascun elemento prima del confronto. Ciò consente una logica di ordinamento complessa, come l'ordinamento di un elenco di stringhe in base alla loro lunghezza o l'ordinamento di un elenco di dizionari in base a una chiave specifica.

Codice e output di esecuzione

Questo codice dimostra l'ordinamento di un elenco di numeri utilizzando sia sort() che sorted(), l'ordinamento inverso e l'ordinamento delle chiavi personalizzato in base alla lunghezza della stringa.

sort_list.py
Prova nell'editor
numbers = [42, 7, 12, 89, 23]

# 1. Using sorted() (returns new list)
new_sorted = sorted(numbers)
print("Original:", numbers)
print("Sorted new list:", new_sorted)

# 2. Using sort() (in-place modification)
numbers.sort()
print("Modified original list:", numbers)

# 3. Sorting in reverse (descending)
numbers.sort(reverse=True)
print("Reverse sorted list:", numbers)

# 4. Custom sorting (by string length)
words = ["banana", "pear", "apple", "fig"]
words.sort(key=len)
print("Sorted by length:", words)
Uscita terminale
Original: [42, 7, 12, 89, 23]
Sorted new list: [7, 12, 23, 42, 89]
Modified original list: [7, 12, 23, 42, 89]
Reverse sorted list: [89, 42, 23, 12, 7]
Sorted by length: ['fig', 'pear', 'apple', 'banana']

Implementazione passo dopo passo

  • Utilizza la funzione sorted() per ordinare una copia dell'elenco senza modificare i dati originali.
  • Utilizza il metodo .sort() direttamente sull'oggetto elenco per modificarlo sul posto e risparmiare memoria.
  • Passare reverse=True come parametro per ordinare gli elementi in ordine decrescente.
  • Utilizza key=lambda x: ... per ordinare gli elementi in base a una proprietà personalizzata (come lunghezza o valori nidificati).

Domande frequenti

Qual è la differenza tra list.sort() e sorted()?

list.sort() modifica l'elenco sul posto e restituisce None, mentre sorted() lascia invariato l'elenco originale e restituisce un nuovo elenco ordinato.

Come si ordina un elenco di dizionari in base a una chiave?

Utilizza il parametro key con una funzione lambda o operator.itemgetter. Ad esempio: list.sort(key=lambda item: item["age"]).

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.