Tuple e unpacking
In questa pagina 5
Tuple
Una tuple è una sequenza immutabile di oggetti qualsiasi.
p = (3, 4)
q = 3, 4 # le parentesi sono facoltative: è la virgola che crea la tupla
singola = (5,) # tupla di un elemento: serve la virgola; (5) è solo l'intero 5
vuota = ()
t = tuple([1, 2]) # da listaIndici, slicing, len, in, +, *, count, index come per le Liste in Pythonlist come sequenza mutabile (array dinamico); indici, slicing e assegnamento a fette; metodi e loro costo; aliasing, copia superficiale e profonda; list comprehension; liste annidate e matrici.Liste in Python →; nessun metodo che modifica (append, sort...). p[0] = 1 → TypeError.
Immutabile riguarda i riferimenti, non gli oggetti: ([1], 2) contiene una lista che si può modificare.
Quando una tupla e quando una lista
- Tupla: numero fisso di campi con significato per posizione (coordinate, record
(nome, cognome, voto), valori di ritorno multipli); dati che non devono cambiare; chiavi di dizionario. - Lista: collezione omogenea di lunghezza variabile.
Le tuple sono hashable (se lo sono i loro elementi) e quindi possono essere chiavi di dizionario o elementi di insieme; le liste no (vedi Dizionari e insiemi in PythonADT mappa e insieme; dict con chiavi hashable, accesso, get, iterazione, conteggi e raggruppamenti; set e operazioni insiemistiche; tabelle hash e costo O(1) medio; Counter e defaultdict.Dizionari e insiemi in Python →).
distanze = {("Padova", "Venezia"): 37, ("Padova", "Verona"): 85}Unpacking (spacchettamento)
x, y = p # x = 3, y = 4
a, b = b, a # scambio: a destra si crea la tupla (b, a)
nome, _, voto = ("Ada", "Lovelace", 30) # _ per un valore da ignorare
primo, *resto = [1, 2, 3, 4] # primo = 1, resto = [2, 3, 4]
*inizio, ultimo = "ciao" # inizio = ['c', 'i', 'a'], ultimo = 'o'Il numero di nomi deve corrispondere al numero di elementi (salvo l'asterisco): altrimenti ValueError: too many values to unpack.
Unpacking nei cicli:
punti = [(0, 0), (1, 2), (3, 1)]
for x, y in punti:
print(x + y)
for i, (x, y) in enumerate(punti):
...Valori di ritorno multipli
def min_max(valori):
return min(valori), max(valori) # restituisce una tupla
lo, hi = min_max([4, 8, 1]) # lo = 1, hi = 8Errori tipici
(5)invece di(5,)per una tupla di un elemento.- Virgola finale accidentale:
x = 3,crea la tupla(3,). - Spacchettare con un numero sbagliato di variabili.