Ordinamento e Inversione di una Tupla in Python
In questa lezione, ci concentreremo sull'ordinamento e l'inversione di una tupla in Python. Analizzeremo come utilizzare la funzione sorted()
per ordinare gli elementi di una tupla e il metodo reversed()
per invertire l'ordine degli elementi di una tupla.
Ordinamento di una Tupla: Funzione sorted()
Abbiamo visto che le tuple sono sequenze di elementi in cui l'ordine stesso degli elementi viene preservato. Tuttavia, le tuple sono anche oggetti immutabili, motivo per cui non possono essere modificate una volta create. Pertanto, non esiste un metodo per ordinare gli elementi di una tupla così come accade, invece, per le liste.
Possiamo, tuttavia, utilizzare la funzione built-in sorted()
per ordinare gli elementi di una tupla.
Abbiamo già visto la funzione sorted
quando abbiamo studiato l'ordinamento delle liste.
In effetti la funzione sorted
prende in ingresso un qualunque iterabile, ossia una qualunque struttura dati che può essere iterata, e restituisce una nuova lista contenente gli elementi dell'iterabile originale ordinati in ordine crescente.
Per cui se passiamo una tupla in ingresso alla funzione sorted
otteniamo in uscita una lista con gli elementi della tupla ordinati in maniera crescente. Vediamo un esempio:
>>> tupla = (3, 1, 2, 5, 4)
>>> lista_ordinata = sorted(tupla)
>>> lista_ordinata
[1, 2, 3, 4, 5]
>>> type(lista_ordinata)
<class 'list'>
A questo punto possiamo ottenere una tupla ordinata a partire da una tupla non ordinata, semplicemente passando la tupla non ordinata alla funzione sorted
e convertendo in seguito la lista ordinata in una tupla:
>>> tupla = (3, 1, 2, 5, 4)
>>> tupla_ordinata = tuple(sorted(tupla))
>>> tupla_ordinata
(1, 2, 3, 4, 5)
>>> type(tupla_ordinata)
<class 'tuple'>
Funzione sorted()
applicata a una tupla
La funzione sorted()
applicata a una tupla restituisce una lista contenente gli elementi della tupla ordinati in ordine crescente.
lista_ordinata = sorted(tupla)
Per ottenere una nuova tupla ordinata a partire da una tupla non ordinata, è necessario convertire la lista ordinata in una tupla:
tupla_ordinata = tuple(sorted(tupla))
Come nel caso delle liste, in generale la funzione sorted
ha un limite. Infatti, per poter ordinare un iterabile la funzione deve poter confrontare gli elementi tra di loro. Quindi, se la tupla contiene elementi di tipo diverso, la funzione sorted
non potrà ordinare la tupla.
Requisiti della funzione sorted
La funzione sorted
può ordinare un iterabile solo se vengono rispettati i seguenti requisiti:
- gli elementi dell'iterabile devono essere dello stesso tipo;
- gli elementi dell'iterabile devono essere confrontabili tra di loro.
Ordinamento in ordine decrescente
La funzione sorted
può essere utilizzata anche per ordinare gli elementi di una tupla in ordine decrescente. Per fare ciò, è sufficiente passare alla funzione sorted
il parametro reverse=True
:
>>> tupla = (3, 1, 2, 5, 4)
>>> tupla_ordinata = tuple(sorted(tupla, reverse=True))
>>> tupla_ordinata
(5, 4, 3, 2, 1)
Il parametro reverse
è opzionale e di default è settato a False
. Se non viene specificato, la funzione sorted
ordina gli elementi in ordine crescente.
Parametro reverse
della funzione sorted()
La funzione sorted
prende in ingresso il parametro opzionale reverse
che, se settato a True
, ordina gli elementi in ordine decrescente.
tupla_ordinata = tuple(sorted(tupla, reverse=True))
Di default il parametro reverse
è settato a False
.
Parametro key
della funzione sorted()
La funzione sorted
prende in ingresso un altro parametro opzionale chiamato key
che permette di specificare una funzione di ordinamento personalizzata.
Per esempio, se volessimo ordinare gli elementi di una tupla in base alla loro lunghezza, potremmo passare alla funzione sorted
il parametro key=len
:
>>> tupla = ('Antonio', 'Maria', 'Giovanni', 'Luca', 'Giulia')
>>> tupla_ordinata = tuple(sorted(tupla, key=len))
>>> tupla_ordinata
('Luca', 'Maria', 'Giulia', 'Antonio', 'Giovanni')
In questo caso, la funzione sorted
ordina gli elementi della tupla in base alla loro lunghezza, ossia in base al numero di caratteri che compongono ciascun elemento.
Parametro key
della funzione sorted()
La funzione sorted
prende in ingresso il parametro opzionale key
che permette di specificare una funzione di ordinamento personalizzata.
tupla_ordinata = tuple(sorted(tupla, key=funzione_di_ordinamento))
Inversione di una Tupla: Funzione reversed()
Possiamo ottenere una nuova tupla che contiene gli elementi della tupla originale in ordine inverso utilizzando la funzione built-in reversed()
.
Come abbiamo visto per le liste, la funzione reversed()
prende in ingresso un qualunque iterabile e restituisce un iteratore che permette di iterare gli elementi dell'iterabile in ordine inverso.
In questo senso, la funzione reversed
è differente rispetto alla funzione sorted
, che restituisce una nuova lista contenente gli elementi dell'iterabile originale ordinati in ordine crescente. La principale differenza sta nel tipo del valore restituito: sorted
restituisce una lista, mentre reversed
restituisce un iteratore.
>>> tupla = (3, 1, 2, 5, 4)
>>> r = reversed(tupla)
>>> type(r)
<class 'reversed'>
Per ottenere una nuova tupla contenente gli elementi della tupla originale in ordine inverso, è necessario convertire l'iteratore restituito dalla funzione reversed
in una tupla:
>>> tupla = (3, 1, 2, 5, 4)
>>> tupla_inversa = tuple(reversed(tupla))
>>> tupla_inversa
(4, 5, 2, 1, 3)
Funzione reversed()
applicata a una tupla
La funzione reversed()
applicata a una tupla restituisce un iteratore che permette di iterare gli elementi della tupla in ordine inverso.
iteratore = reversed(tupla)
Per ottenere una nuova tupla contenente gli elementi della tupla originale in ordine inverso, è necessario convertire l'iteratore restituito dalla funzione reversed
in una tupla:
tupla_inversa = tuple(reversed(tupla))
In Sintesi
In questa lezione abbiamo visto come ordinare una lista in ordine crescente attraverso la funzione sorted
. In particolare:
- la funzione
sorted
prende in ingresso un iterabile e restituisce una nuova lista contenente gli elementi dell'iterabile originale ordinati in ordine crescente; - Si può ottenere una nuova tupla applicando la funzione
tuple
alla lista restituita dalla funzionesorted
; - la funzione
sorted
può essere utilizzata anche per ordinare gli elementi di una tupla in ordine decrescente attraverso il parametro opzionalereverse=True
; - la funzione
sorted
prende in ingresso un altro parametro opzionale chiamatokey
che permette di specificare una funzione di ordinamento personalizzata; - la funzione
reversed
applicata a una tupla restituisce un iteratore che permette di iterare gli elementi della tupla in ordine inverso; - per ottenere una nuova tupla contenente gli elementi della tupla originale in ordine inverso, è necessario convertire l'iteratore restituito dalla funzione
reversed
in una tupla.