Come ordinare gli elenchi in Python

Questo articolo ti insegnerà come ordinare un elenco in Python.

In Python, puoi usare il metodo sort() per ordinare un elenco sul posto. Oppure puoi usare la funzione built-in sorted() per ottenere una copia ordinata dell’elenco.

In questo tutorial imparerai:

  • Sintassi del metodo sort() e della funzione sorted()
  • Esempi di codice di ordinamento delle liste in ordine crescente e decrescente
  • Personalizza l’ordinamento utilizzando il parametro chiave
  • Differenza tra sort() e sorted()

Cominciamo!👩🏽‍💻

Sintassi del metodo Python sort()

Il metodo sort() agisce su un elenco Python. E ordina l’elenco in posizione e modifica l’elenco originale.

La sintassi per il metodo sort() di Python è:

<list>.sort(reverse = True | False, key = <func>)

Analizziamo ora la sintassi precedente.

  • è un qualsiasi oggetto elenco Python valido.
  • reverse è un parametro facoltativo che accetta True o False.
  • Il valore predefinito di reverse è False e l’elenco è ordinato in ordine crescente. Dare True per ordinare l’elenco in ordine decrescente.
  • key è anche un parametro facoltativo impostato su .
  • può essere una funzione incorporata o una funzione definita dall’utente.

Nella sezione successiva, inizierai a codificare semplici esempi.

Come ordinare l’elenco Python in ordine crescente

Considera i numeri di elenco. Per ordinare l’elenco in ordine crescente, puoi chiamare il metodo sort() nell’elenco.

▶ Eseguire il seguente frammento di codice.

nums = [25,13,6,17,9]
nums.sort()
print(nums)

# Output: [6, 9, 13, 17, 25]

I numeri dell’elenco sono stati ordinati in ordine crescente e l’elenco originale è stato modificato. Questo è chiamato ordinamento sul posto.

Come ordinare l’elenco Python in ordine decrescente

Per ordinare l’elenco in ordine decrescente, imposta il contrario su True, come mostrato di seguito.

nums = [25,13,6,17,9]
nums.sort(reverse = True)
print(nums)

# Output: [25, 17, 13, 9, 6]

Puoi vedere che l’elenco è ora ordinato in ordine decrescente.

Come usare la chiave con il metodo Python sort()

In questa sezione, utilizziamo il parametro chiave e personalizziamo l’ordinamento.

Qui, mod5() è una funzione che accetta un numero x e restituisce il resto quando il numero x è diviso per 5.

def mod5(x):
  return x % 5 

E vorremmo usare la funzione sopra come chiave.

Ora, esegui la seguente cella di codice.

nums = [25,13,6,17,9]
nums.sort(key = mod5)
print(nums)

# Output: [25, 6, 17, 13, 9]

Prenditi un minuto per analizzare l’output.

Nota come invece del normale ordinamento, ora stai personalizzando il tuo ordinamento in base alla chiave che è mod5.

  • Il numero che lascia il resto minimo quando diviso per 5 viene ora per primo.
  • E il numero che lascia il resto più grande quando diviso per 5 è l’ultimo elemento nell’elenco ordinato.

Per verificare che questo sia il caso, eseguire il seguente frammento di codice.

nums = [25,13,6,17,9]

for num in nums:
  print(f"{num} leaves remainder {num%5} when divided by 5")

# Output
25 leaves remainder 0 when divided by 5
13 leaves remainder 3 when divided by 5
6 leaves remainder 1 when divided by 5
17 leaves remainder 2 when divided by 5
9 leaves remainder 4 when divided by 5

5 divide esattamente 25 e il resto è 0. Quindi questo è il primo elemento nell’elenco ordinato. 6 lascia resto 1, quindi è il secondo elemento e così via. 9 lascia il resto 4 quando diviso per 5 ed è l’ultimo elemento nell’elenco ordinato.

Invece di definire una funzione separata, potresti anche usare funzioni lambda. In Python, le lambda sono funzioni anonime di una riga. lambda args : expression restituisce l’espressione calcolata sugli args.

Ora riscriviamo l’ordinamento sopra usando l’espressione lambda, come mostrato di seguito.

nums = [25,13,6,17,9]
nums.sort(key = lambda x:x%5)
print(nums)

# Output: [25, 6, 17, 13, 9]

Finora, hai imparato come ordinare un elenco di numeri. Quindi, vediamo come puoi ordinare un elenco di stringhe in Python.

Come ordinare l’elenco Python in ordine alfabetico

In questa sezione imparerai a ordinare un elenco di stringhe, con esempi ispirati a Harry Potter. ✨

Nel nostro esempio, studenti è un elenco di studenti a Hogwarts. E vorremmo ordinarli nell’ordine alfabetico dei loro nomi.

Quando si ordina un elenco di stringhe, l’ordinamento predefinito è in ordine alfabetico.

students = ["Harry","Ron","Hermione","Draco","Cedric"]

Stampiamo l’elenco ordinato per verificare il risultato dell’ordinamento.

students.sort()
print(students)

# Output
['Cedric','Draco', 'Harry', 'Hermione', 'Ron']

Come ordinare l’elenco Python in ordine alfabetico inverso

Per ordinare l’elenco in ordine alfabetico inverso, impostare reverse = True, come mostrato nel frammento di codice di seguito.

students.sort(reverse = True)
print(students)

# Output
['Ron', 'Hermione', 'Harry', 'Draco', 'Cedric']

Dall’output, puoi vedere che l’elenco è stato effettivamente ordinato in ordine inverso.

Come utilizzare il parametro chiave Personalizza Ordina

In questa sezione, personalizziamo l’ordinamento utilizzando il parametro chiave facoltativo.

Considera il seguente elenco, case.

houses = [
            {1:"Draco","house":"Slytherin"},
            {2:"Harry","house":"Gryffindor"},
            {3:"Cedric","house":"Hufflepuff"}
         ]

Qui, case è un elenco di dizionari. Ogni dizionario contiene due coppie chiave-valore, una che denota i nomi degli studenti e l’altra la casa a cui appartengono.

Ora, vorremmo ordinare questo elenco di case nell’ordine alfabetico delle case a cui appartengono.

Come avrai già intuito, dovremmo impostare il parametro chiave sulla casa degli studenti in particolare.

Per recuperare la casa di ogni studente, puoi definire una funzione returnHouse(), come mostrato di seguito.

def returnHouse(student):
  return student['house']

Questa funzione restituisce la casa a cui appartiene il particolare studente.

Ora puoi chiamare il metodo sort() nell’elenco delle case, come mostrato.

houses.sort(key=returnHouse)

Nell’output sottostante, nota come l’elenco è ordinato per casa e non per nome degli studenti. Ecco perché abbiamo Grifondoro, Tassorosso e Serpeverde, in ordine alfabetico.

print(houses)

# Output
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

Per definire di conseguenza il parametro chiave, puoi anche utilizzare una funzione lambda. Per ogni elemento dell’elenco, questa funzione restituisce la casa per quell’elemento dell’elenco.

▶ Eseguire la seguente cella di codice per verificarlo.

houses.sort(key=lambda student:student["house"])
print(houses)

# Output
[{2: 'Harry', 'house': 'Gryffindor'}, 
{3: 'Cedric', 'house': 'Hufflepuff'}, 
{1: 'Draco', 'house': 'Slytherin'}]

In tutti gli esempi finora, hai usato il metodo sort() su un elenco. E ora sai che modifica l’elenco originale.

Cosa succede se desideri mantenere l’elenco originale così com’è ma ottenere una copia ordinata dell’elenco?

Bene, in Python, puoi usare la funzione sorted() per farlo.

Sintassi della funzione Python sorted()

La funzione sorted() accetta un elenco o qualsiasi raccolta come argomento. E restituisce una copia ordinata dell’elenco e l’elenco originale non viene modificato.

La sintassi per la funzione sorted() di Python è:

<sorted_copy> = sorted(<list>, reverse = True | False, key = <func>)

Nota come la sintassi sia molto simile al metodo sort() che abbiamo visto in precedenza.

  • è un qualsiasi oggetto elenco Python valido ed è un parametro obbligatorio.
  • reverse e key sono parametri opzionali

Nota: a differenza del metodo sort() che agisce solo sulle liste, la funzione sorted() può essere utilizzata per ordinare qualsiasi iterabile Python, come liste, stringhe e dizionari.

Come ordinare l’elenco Python usando la funzione sorted()

# 1. In questo esempio, nums è un elenco di numeri.

Puoi chiamare la funzione sorted() con nums come argomento. E assegnalo all’elenco sorted_nums1.

nums = [25,13,6,17,9]
sorted_nums1 = sorted(nums)
print(sorted_nums1)

# Output: [6, 9, 13, 17, 25]

Nell’output sopra, puoi vedere che i numeri sono stati ordinati in ordine crescente per impostazione predefinita.

Notare inoltre che i numeri dell’elenco originale non vengono modificati, perché sorted() restituisce un nuovo elenco. Questo è verificato di seguito.

print(nums)
 # Output: [25, 13, 6, 17, 9]

#2. Ora, imposta il parametro opzionale reverse su True e ottieni sorted_nums2.

Come mostrato nella cella del codice sottostante, sorted_nums2 è un nuovo elenco con gli elementi ordinati in ordine decrescente.

sorted_nums2 = sorted(nums,reverse = True)
print(sorted_nums2)

# Output: [25, 17, 13, 9, 6]

#3. In questo esempio, lavoriamo con un elenco di stringhe.

Come negli esempi precedenti, la chiamata alla funzione sorted() restituisce un nuovo elenco. E gli articoli sono ordinati in ordine alfabetico.

fruits = ['pears','strawberry','apple','pineapple','blueberry']
sorted_fr1 = sorted(fruits)
print(sorted_fr1)

# Output:
['apple', 'blueberry', 'pears', 'pineapple', 'strawberry']

#4. Ora personalizziamo l’ordinamento usando il parametro chiave facoltativo. Impostare la chiave su len. Questo ordinerà l’elenco in base alla lunghezza delle stringhe.

Nota: in Python, la funzione len() incorporata accetta qualsiasi iterabile, come liste, stringhe, tuple e così via. E restituisce la lunghezza dell’iterabile.

La stringa con la lunghezza più breve viene visualizzata per prima nell’elenco ordinato e la stringa più lunga viene visualizzata alla fine dell’elenco ordinato.

fruits = ['pear','strawberry','apple','pineapple','blueberry']
sorted_fr2 = sorted(fruits,key=len)
print(sorted_fr2)

# Output:
['pear', 'apple', 'pineapple', 'blueberry', 'strawberry']

Nell’output sopra, pera è la stringa più corta e fragola è la stringa più lunga.

Python sort() Metodo vs. sorted() Funzione

Finora, hai imparato come usare il metodo sort() e la funzione sorted(). In questa sezione, enumeriamo le differenze tra questi due metodi.

Python .sort() MethodPython sorted() FunctionOrdina l’elenco in posizione: modifica l’elenco originaleRestituisce un nuovo elenco ordinatoFunziona solo con elenchi PythonFunziona con iterabili Python come elenchi, stringhe e altre raccolteHa il tipo restituito NessunoRestituisce una copia ordinata dell’iterabile

Riassumendo 👩‍🏫

Spero che tu abbia trovato utile questo tutorial sugli elenchi di Python.

Riassumiamo rapidamente ciò che abbiamo trattato.

  • Utilizzare list.sort(reverse = True | False, key = ) con i parametri reverse e key opzionali per ordinare un elenco in posizione.
  • Utilizzare sorted(list, reverse = True | False, key = ) per ottenere una copia ordinata dell’elenco.

Ora che hai imparato a ordinare gli elenchi Python, scopri la comprensione degli elenchi in Python. Oppure potresti anche imparare come gestire i file o lavorare con i file JSON in Python.

Puoi provare gli esempi forniti sopra nel compilatore Python online winadmin.it.