La tupla in python
Nel linguaggio Python la tupla è un elenco immodificabile di oggetti eterogenei, valori numerici e alfanumerici. Una volta definita una tupla non può essere modificata, né possono essere aggiunti nuovi elementi.
elenco = ( elemento1, elemento2, ... , elemento n )
Un esempio pratico di tupla
Si sceglie il nome della variabile vettore seguita dal simbolo uguale.
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
L'elenco dei valori della tupla è racchiusa tra due variabili tonde.
I valori sono separati tra loro dalla virgola.
Nota. Tecnicamente, le parentesi sono facoltative per definire una tupla ma è buona pratica usarle. Sono invece obbligatorie le virgole, anche se la tupla è composta da un solo elemento.
Una tupla può contenere sia valori alfanumerici che numerici.
E' quindi possibile scrivere una tupla come la seguente:
elenco=("ottimo", 10, "discreto", 9 )
I valori alfanumerici sono racchiusi tra doppie virgolette mentre quelli numerici non hanno virgolette o apici.
Qual è la differenza tra tuple e liste in Python
Nel linguaggio Python la lista può essere modificata.
In una lista si può cambiare il contenuto degli elementi o aggiungerne nuovi elementi in coda all'elenco.
In una tupla, invece, non è possibile né modificare il contenuto degli elementi, né aggiungerne nuovi.
Come distinguere una lista da una tupla? Per riconoscere una lista da un vettore è sufficiente osservare le parentesi che racchiudono i valori. Se le parentesi sono quadre si tratta di una lista. Se le parentesi sono tonde si tratta di una tupla.
Come trasformare una tupla in lista
Per convertire una tupla in una lista utilizzo l'istruzione list.
lista = list ( tupla )
Come trasformare una lista in tupla
Per convertire una lista in tupla utilizzo l'istruzione tuple.
tupla = tuple ( lista )
Perché usare le tuple?
Se un vettore non deve essere modificato, è preferibile usare una tupla piuttosto che una lista per le seguenti ragioni.
- La computazione è più veloce. Il tempo di elaborazione di una tupla è minore rispetto a una lista.
- Lo spazio di memoria è inferiore. Le tuple consumano una minore quantità dello spazio di memoria rispetto alle liste.
In conclusione, a parità di condizioni l'uso delle tuple consente al programmatore di ridurre la complessità spaziale e temporale dell'algoritmo.
Il caso di una tupla con un elemento
Quando creo una lista con un solo elemento devo aggiungere la virgola.
In caso contrario l'interprete Python la tratterebbe come una stringa
Esempio
tupla=('uno',)
Se scrivessi tupla=('uno') l'interprete considererebbe l'istruzione come un'assegnazione tupla='uno'.
Esempi
Alcuni esempi pratici di utilizzo
Esempio 1
Con le tuple posso utilizzare lo slicing.
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
print( giorni[:3] )
Lo slicing estrae dal primo al terzo elemento [:3]
Lo zero è sottinteso ossia [:3] equivale a [0:3]
('lunedì', 'martedì', 'mercoledì')
Esempio 2
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
print( giorni[-1] )
L'output è il seguente:
('domenica')
In questo caso prende in considerazione soltanto l'ultimo elemento della tupla.
I metodi delle tuple
Le tuple hanno pochi metodi. Soltanto count e index.
Count()
Il metodo count conta le occorrenze di un elemento nella tupla. Se non lo trova restituisce un'eccezione.
Esempio
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
print( giorni.count('martedì' )
L'output è il seguente
1
L'elemento cercato ('martedì') si presenta una sola volta nella tupla.
Index()
Il metodo indice cerca un elemento nella tupla e ne restituisce la posizione. Se non lo trova restituisce un'eccezione.
Esempio
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
print( giorni.index('sabato' )
L'output è il seguente
5
L'elemento cercato ('sabato') è al sesto posto della tupla.
La sua posizione è la quinta (5) perché il primo elemento ha sempre una posizione zero.
Come cercare un elemento nella tupla
Per ricercare qualcosa in una tupla posso usare il metodo index o count.
Tuttavia, questi metodi restituiscono un'eccezione se non trovano nulla.
E' quindi preferibile usare l'operatore IN perché non restituisce eccezioni ma soltanto un valore logico booleano true o false.
Un esempio pratico
Voglio verificare l'esistenza di un valore ('sabato') dentro la stringa.
giorni=("lunedì", "martedì", "mercoledì", "giovedì", "venerdì", "sabato", "domenica")
'sabato ' in giorni
Il risultato sullo schermo è il seguente:
true