
In Python, puoi muoverti di una tupla o di un elenco a più variabili. Si chiama disimballaggio della sequenza.
In questo articolo vengono descritti i seguenti contenuti.
- Nozioni di base sulla decompressione di una tupla e di una lista
- Decomprimere una tupla nidificata e un elenco
- Disimballare con _ (sottolineatura)
- Disimballare con * (asterisco)
Vedere l’articolo seguente per il caso di decompressione di tuple, elenchi e dizionari (dict) come argomenti con * (asterisco).
Nozioni di base sulla decompressione di una tupla e di una lista
Se scrivi variabili sul lato sinistro separate da virgole, gli elementi di una tupla o di un elenco sul lato destro vengono assegnati a ciascuna variabile. Gli esempi seguenti sono tuple, ma lo stesso vale per le liste.
t = (0, 1, 2)
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# 2
l = [0, 1, 2]
a, b, c = l
print(a)
print(b)
print(c)
# 0
# 1
# 2
Poiché le parentesi di tuple possono essere omesse, più valori possono essere assegnati a più variabili in una riga come segue.
a, b = 0, 1
print(a)
print(b)
# 0
# 1
Viene generato un errore se il numero di variabili non corrisponde al numero di elementi.
# a, b = t
# ValueError: too many values to unpack (expected 2)
# a, b, c, d = t
# ValueError: not enough values to unpack (expected 4, got 3)
Se il numero inferiore al numero di elementi, è possibile aggiungere un asterisco * al nome della variabile e aggiungere gli elementi rimanenti come una lista. Questo è più avanti.
Decomprimere una tupla nidificata e un elenco
Puoi anche decomprimere una tupla o un elenco nidificato. Se si desidera espandere l’elemento interno, racchiudere la variabile con () o [].
t = (0, 1, (2, 3, 4))
a, b, c = t
print(a)
print(b)
print(c)
# 0
# 1
# (2, 3, 4)
print(type(c))
# <class 'tuple'>
a, b, (c, d, e) = t
print(a)
print(b)
print(c)
print(d)
print(e)
# 0
# 1
# 2
# 3
# 4
Disimballare con _ (sottolineatura)
Per convenzione, valori non necessari possono essere assegnati a caratteri di sottolineatura _ in Python. Non ha un significato grammaticale speciale ma è semplicemente assegnato a una variabile denominata _.
t = (0, 1, 2)
a, b, _ = t
print(a)
print(b)
print(_)
# 0
# 1
# 2
Disimballare con * (asterisco)
Se il numero di variabili è inferiore al numero di elementi, l’aggiunta di un asterisco * al nome della variabile assegnerà gli elementi insieme come un elenco.
È implementato in Python 3 e non può essere utilizzato in Python 2.
Gli elementi dall’inizio e dalla fine vengono assegnati alle variabili senza * e gli elementi rimanenti vengono assegnati come elenco alle variabili con *.
t = (0, 1, 2, 3, 4)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2, 3, 4]
print(type(c))
# <class 'list'>
a, *b, c = t
print(a)
print(b)
print(c)
# 0
# [1, 2, 3]
# 4
*a, b, c = t
print(a)
print(b)
print(c)
# [0, 1, 2]
# 3
# 4
Ad esempio, quando si desidera includere alle variabili solo i primi due elementi di una tupla o di un elenco, il carattere di sottolineatura _ può essere utilizzato per parti non necessarie.
a, b, *_ = t
print(a)
print(b)
print(_)
# 0
# 1
# [2, 3, 4]
Lo stesso processo può essere scritto come segue:
a, b = t[0], t[1]
print(a)
print(b)
# 0
# 1
Puoi aggiungere * a una sola variabile.
Se sono presenti variabili con *, non è più possibile quanti elementi devono essere assegnati, quindi viene sollevato SyntaxError.
# *a, b, *c = t
# SyntaxError: two starred expressions in assignment
Si noti che anche se un solo elemento è assegnato a una variabile con *, viene assegnato come un elenco.
t = (0, 1, 2)
a, b, *c = t
print(a)
print(b)
print(c)
# 0
# 1
# [2]
print(type(c))
# <class 'list'>
Se non sono presenti elementi aggiuntivi, viene assegnata una lista vuota.
a, b, c, *d = t
print(a)
print(b)
print(c)
print(d)
# 0
# 1
# 2
# []
