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'>
Definizione

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.

Nota

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.

Definizione

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.

Definizione

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)
Definizione

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 funzione sorted;
  • la funzione sorted può essere utilizzata anche per ordinare gli elementi di una tupla in ordine decrescente attraverso il parametro opzionale reverse=True;
  • la funzione sorted prende in ingresso un altro parametro opzionale chiamato key 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.