Resumo: neste tutorial, você aprenderá como desempacotar tuplas em Python.
Revendo tuplas do Python
Python define uma tupla usando vírgulas (,
), não parênteses ()
. Por exemplo, o seguinte define uma tupla com dois elementos:
1,2
Python usa os parênteses para tornar a tupla mais clara:
(1, 2)
Python também usa os parênteses para criar uma tupla vazia:
()
Além disso, você pode usar o construtor tuple()
assim:
tuple()
Para definir uma tupla com apenas um elemento, você ainda precisa usar uma vírgula. O exemplo a seguir ilustra como definir uma tupla com um elemento:
1,
É equivalente ao seguinte:
(1, )
Observe que o seguinte é um inteiro, não uma tupla:
(1)
Descompactando uma tupla
Desempacotar uma tupla significa dividir os elementos da tupla em variáveis individuais. Por exemplo:
x, y = (1, 2)
O lado esquerdo:
x, y
é uma tupla de duas variáveis x
e y
.
O lado direito também é uma tupla de dois inteiros 1
e 2
.
A expressão atribui os elementos da tupla no lado direito (1, 2) a cada variável no lado esquerdo (x, y) com base na posição relativa de cada elemento.
No exemplo acima, x
vai receber 1
e y
vai receber 2
.
Veja outro exemplo:
x, y ,z = 10, 20, 30
O lado direito é uma tupla de três inteiros 10
, 20
e 30
. Você pode verificar rapidamente seu tipo da seguinte maneira:
numbers = 10, 20, 30
print(type(numbers))
Saída:
<class 'tuple'>
No exemplo acima, as variáveis x
, y
e z
assumirão os valores 10
, 20
, e 30
respectivamente.
Usando descompactação de tuplas para trocar valores de duas variáveis
Tradicionalmente, para trocar os valores de duas variáveis, você usaria uma variável temporária como esta:
x = 10
y = 20
print(f'x={x}, y={y}')
tmp = x
x = y
y = tmp
print(f'x={x}, y={y}')
Saída:
x=10, y=20
x=20, y=10
Em Python, você pode usar a sintaxe de tupla de descompactação para obter o mesmo resultado:
x = 10
y = 20
print(f'x={x}, y={y}')
x, y = y, x
print(f'x={x}, y={y}')
Saída:
x=10, y=20
x=20, y=10
A expressão a seguir troca os valores de duas variáveis, x e y.
x, y = y, x
Nessa expressão, Python avalia primeiro o lado direito e depois atribui a variável do lado esquerdo aos valores do lado direito.
ValueError: muitos valores para desempacotar
O exemplo a seguir descompacta os elementos de uma tupla em variáveis. No entanto, resultará em um erro:
x, y = 10, 20, 30
Erro:
ValueError: too many values to unpack (expected 2)
Esse erro ocorre porque o lado direito retorna três valores, enquanto o lado esquerdo possui apenas duas variáveis.
Para corrigir isso, você pode adicionar uma variável _
:
x, y, _ = 10, 20, 30
A variável _
é uma variável regular em Python. Por convenção, é chamada de variável fictícia.
Normalmente, você usa a variável fictícia para descompactar quando não se importa e usa seu valor posteriormente.
Descompactação estendida usando o operador *
Às vezes, você não deseja descompactar todos os itens de uma tupla. Por exemplo, você pode querer descompactar o primeiro e o segundo elementos. Nesse caso, você pode usar o operador *
. Por exemplo:
r, g, *other = (192, 210, 100, 0.5)
Saída:
192
210
[100, 0.5]
Neste exemplo, o Python atribui 192
a r
, 210
a g
. Além disso, o Python empacota os elementos restantes (100
, 0.5
) em uma lista e a atribui à variável other
.
Observe que você só pode usar o operador *
uma vez no lado esquerdo de uma atribuição de desempacotamento.
O exemplo a seguir resulta em erro:
x, y, *z, *t = (10, 20, 30, '10:30')
Erro:
SyntaxError: two starred expressions in assignment
Usando o operador * no lado direito
Python permite que você use o operador *
no lado direito. Suponha que você tenha duas tuplas:
odd_numbers = (1, 3, 5)
even_numbers = (2, 4, 6)
O exemplo a seguir usa o operador *
para desempacotar essas tuplas e mesclá-las em uma única tupla:
numbers = (*odd_numbers, *even_numbers)
print(numbers)
Saída:
(1, 3, 5, 2, 4, 6)
Resumo
- Python usa as vírgulas (
,
) para definir uma tupla, não parênteses. - Desempacotar tuplas significa atribuir elementos individuais de uma tupla a múltiplas variáveis.
- Use o operador
*
para atribuir elementos restantes de uma atribuição de descompactação em uma lista e atribuí-la a uma variável.