Tuple
Python fornisce un tipo built-in chiamato tupla, che viene solitamente usato per rappresentare una sequenza immutabile di oggetti, in genere eterogenei.
Definire le tuple
L'operatore che definisce le tuple è la virgola (,
), anche se per evitare ambiguità la sequenze di elementi vengono spesso racchiuse tra parentesi tonde. In alcune espressioni, dove le virgole hanno già un significato diverso (ad esempio separare gli argomenti di una funzione), le parentesi sono necessarie.
>>> t = 'abc', 123, 45.67 # la virgola crea la tupla
>>> t # la rappresentazione di una tupla include sempre le ()
('abc', 123, 45.67)
>>> type(t)
<class 'tuple'>
>>> tp = ('abc', 123, 45.67) # le () evitano ambiguità
>>> t == tp # il risultato è equivalente
True
>>> len((1, 'a', 2.3)) # in questo caso le () sono necessarie
3
>>> len(1, 'a', 2.3) # perché qua la , separa gli argomenti
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: len() takes exactly one argument (3 given)
Per creare una tupla di un elemento, è comunque necessario l'uso della virgola, mentre per creare una tupla vuota bastano le parentesi tonde:
>>> t = 'abc', # tupla di un solo elemento
>>> t
('abc',)
>>> tv = () # tupla vuota, senza elementi
>>> tv
()
>>> type(tv) # verifichiamo che sia una tupla
<class 'tuple'>
>>> len(tv) # verifichiamo che abbia 0 elementi
0
Usare le tuple
Le tuple sono un tipo di sequenza (come le strighe), e supportano le operazioni comuni a tutte le sequenze, come indexing, slicing, contenimento, concatenazione, e ripetizione:
>>> t = ('abc', 123, 45.67)
>>> t[0] # le tuple supportano indexing
'abc'
>>> t[:2] # slicing
('abc', 123)
>>> 123 in t # gli operatori di contenimento "in" e "not in"
True
>>> t + ('xyz', 890) # concatenazione (ritorna una nuova tupla)
('abc', 123, 45.67, 'xyz', 890)
>>> t * 2 # ripetizione (ritorna una nuova tupla)
('abc', 123, 45.67, 'abc', 123, 45.67)
Le tuple sono immutabili, quindi una volta create non è possibile aggiungere, rimuovere, o modificare gli elementi:
>>> t[0] = 'xyz' # non è possibile modificare gli elementi
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
È anche possibile usare funzioni e metodi comuni a tutte le sequenze: len()
per contare gli elementi, min()
e max()
per trovare l'elemento più piccolo/grande (a patto che i tipi degli elementi siano comparabili), .index()
per trovare l'indice di un elemento, e .count()
per contare quante volte un elemento è presente nella tupla:
>>> len(('abc', 123, 45.67, 'xyz', 890)) # numero di elementi
5
>>> min((4, 1, 7, 5)) # elemento più piccolo
1
>>> max((4, 1, 7, 5)) # elemento più grande
7
>>> t = ('a', 'b', 'c', 'b', 'a')
>>> t.index('c') # indice dell'elemento 'c'
2
>>> t.count('c') # numero di occorrenze di 'c'
1
>>> t.count('b') # numero di occorrenze di 'b'
2
Nella prossima lezione vedremo un altro tipo di sequenza, la lista, e quali sono le differenze tra tuple e liste.