Tuple

Come trattare sequenze di oggetti vari.

Separare i dati dalle espressioni o dagli algoritmi che li usano è uno dei metodi fondamentali dell’informatica. Questo consente di accedere agli stessi dati in momenti diversi e per scopi (operazioni o programmi) diversi. Oppure consente di di utilizzare gli stessi programmi su dati diversi. Nei linguaggi di programmazione, di solito, un nome che fa riferimento ad un valore viene detto “variabile”, perché il nome, in momenti diversi, può fare riferimento a valori diversi. Le variabili in Python sono dunque degli identificatori collegati con oggetti. Alcuni tipi di oggetti li abbiamo già incontrati: numeri interi (int), numeri in virgola mobile (float), stringhe (str). In questo e nei prossimi capitoli parleremo di: tuple (tuple), liste (list) e dizionari (dict), ... in realtà ogni cosa in Python è un oggetto.

Iniziamo dalle tuple.

Abbiamo visto che una stringa è una sequenza di caratteri, ma se abbiamo bisogno di una sequenza di oggetti diversi dai caratteri, dobbiamo utilizzare altri strumenti. Supponiamo di avere una centralina atmosferica che deve trasmettere i seguenti dati:

  • la temperatura,
  • l’umidità,
  • la pressione atmosferica,
  • la velocità e la direzione del vento,
  • lo stato del cielo.

Questi dati potrebbero essere inseriti in una tupla:

>>> meteo = (23.5, 76, 1042, (2.5, "NE"), "cloud")

Alcune osservazioni:

  1. Una tupla è una sequenza che può contenere oggetti diversi, anche altre tuple.
  2. Si possono estrarre gli elementi di una sequenza usando gli indici con la sintassi: <sequenza>[<indice>]
  3. È Importante ricordare che tutte le sequenze, in Python partono dall’elemento 0, cioè il primo elemento di una sequenza ha sempre indice 0, il secondo ha indice 1 e così via.
  4. Possiamo anche estrarre gli elementi riferendoci alla fine della sequenza: l’ultimo elemento ha indice -1, il penultimo -2 e così via.

Il primo elemento della tupla precedente è un numero in virgola mobile, poi ci sono due numeri interi, il quarto elemento è una tupla formata da un numero e una stringa e il quinto è una stringa.

Posso estrarre dall’oggetto meteo i dati relativi al vento con l’istruzione:

>>> print(meteo[3])
(2.5, 'NE')

Per stampare temperatura, umidità e pressione:

>>> print(meteo[:3])
(23.5, 76, 1042)

Se volessi solo la direzione del vento basta che prenda il secondo elemento del quarto elemento di meteo (ricordiamoci che l’indicizzazione parte sempre da 0):

>>> print(meteo[3][1])
NE

Vediamo comunque un altro uso delle tuple. Supponiamo di avere inserito in una tupla il nome l’età e l’indirizzo di una persona:

>>> omo = ("Mario Rossi", 45, "via Verdi, 4")
Possiamo stampare questi dati per ottenere una specie di etichetta:
>>> print("Sig.", omo[0], "\nabitante in", omo[2], "\ndi anni", omo[1])
Sig. Mario Rossi
abitante in via Verdi, 4
di anni 45

Lo stesso effetto lo possiamo ottenere usando la formattazione di stringhe:

>>> print("Sig. {0}\nabitante in {1}\ndi anni{2}".format(omo))
Traceback (most recent call last):
  File "<pyshell#7>", line 1, in <module>
    print("Sig. {0}\nabitante in {1}\ndi anni{2}".format(omo))
IndexError: tuple index out of range

Accidenti, così non funziona infatti format vuole avere separatamente gli oggetti che deve inserire nella stringa, per disfare una tupla nelle sue varie componenti basta far precedere un asterisco al nome collegato alla tupla:

>>> print("Sig. {0}\nabitante in {1}\ndi anni{2}".format(*omo))
Sig. Mario Rossi
abitante in 45
di annivia Verdi, 4

C’è ancora qualcosa che non va, come modificare l’ordine delle variabili?

Riassumendo

  • Le liste e le tuple sono contenitori di oggetti. L’indicizzazione e l’affettamento, che abbiamo visto per le stringhe, funzionano allo stesso modo per tutte le sequenze.

  • Le liste sono sequenze modificabili, le tuple no.

  • Il metodo append permette di aggiungere elementi alla fine delle liste. La sintassi è:

    <lista>.append(<oggetto>).
    
  • In Python esiste anche una sintassi particolare per costruire liste.

Prova tu

  1. Scrivi altre funzioni statistiche per liste di numeri: massimo, scarto quadratico medio, ...
  2. Integra queste nuove funzioni nella procedura statistica.
  3. Scrivi una funzione che stampi gli elementi di una lista uno sotto l’altro.
  4. Scrivi una funzione che, data una lista di numeri e un valore, stampi solo i numeri maggiori di quel valore.
  5. Scrivi una funzione che, data una lista di numeri e un valore, restituisca una lista formata solo dagli elementi della lista maggiori di quel valore.