Skip to content

Disimballare una tupla e un elenco in Python

Python

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
# []