Resumo : neste tutorial, você aprenderá como descompactar tuplas em Python.
Revendo tuplas Python
Python define uma tupla usando vírgulas ( ,
), não parênteses ()
. Por exemplo, o seguinte define uma tupla com dois elementos:
1,2
Linguagem de código: Python ( python )
Python usa parênteses para tornar a tupla mais clara:
(1, 2)
Linguagem de código: Python ( python )
Python também usa parênteses para criar uma tupla vazia:
()
Linguagem de código: Python ( python )
Além disso, você pode usar o tuple()
construtor assim:
tuple()
Linguagem de código: Python ( python )
Para definir uma tupla com apenas um elemento, ainda é necessário usar vírgula. O exemplo a seguir ilustra como definir uma tupla com um elemento:
1,
Linguagem de código: Python ( python )
É equivalente ao seguinte:
(1, )
Linguagem de código: Python ( python )
Observe que o seguinte é um número inteiro , não uma tupla:
(1)
Linguagem de código: Python ( python )
Descompactando uma tupla
Descompactar uma tupla significa dividir os elementos da tupla em variáveis individuais . Por exemplo:
x, y = (1, 2)
Linguagem de código: Python ( python )
O lado esquerdo:
x, y
Linguagem de código: Python ( python )
é 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 do lado direito (1, 2) a cada variável do lado esquerdo (x, y) com base na posição relativa de cada elemento.
No exemplo acima, x
levará 1
e y
levará 2
.
Veja outro exemplo:
x, y ,z = 10, 20, 30
Linguagem de código: Python ( python )
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))
Linguagem de código: Python ( python )
Saída:
<class 'tuple'>
Linguagem de código: Python ( python )
No exemplo acima, as variáveis x
, y
e z
assumirão os valores 10
, 20
e 30
respectivamente.
Usando descompactação de tupla 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}')
Linguagem de código: Python ( python )
Saída:
x=10, y=20
x=20, y=10
Linguagem de código: Python ( python )
Em Python, você pode usar a sintaxe de descompactação da tupla 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}')
Linguagem de código: Python ( python )
Saída:
x=10, y=20
x=20, y=10
Linguagem de código: Python ( python )
A expressão a seguir troca os valores de duas variáveis, x e y.
x, y = y, x
Linguagem de código: Python ( python )
Nesta 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 descompactar
O exemplo a seguir descompacta os elementos de uma tupla em variáveis. No entanto, isso resultará em um erro:
x, y = 10, 20, 30
Linguagem de código: Python ( python )
Erro:
ValueError: too many values to unpack (expected 2)
Linguagem de código: Python ( python )
Este 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
Linguagem de código: Python ( python )
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 depois.
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. Neste caso, você pode usar o *
operador. Por exemplo:
r, g, *other = (192, 210, 100, 0.5)
Linguagem de código: Python ( python )
Saída:
192
210
[100, 0.5]
Linguagem de código: Python ( python )
Neste exemplo, Python atribui 192
a r
, 210
a g
. Além disso, Python empacota os elementos restantes 100
em 0.5
uma lista e os atribui à other
variável.
Observe que você só pode usar o *
operador uma vez no lado esquerdo de uma tarefa de descompactação.
O exemplo a seguir resulta em erro:
x, y, *z, *t = (10, 20, 30, '10:30')
Linguagem de código: Python ( python )
Erro:
SyntaxError: two starred expressions in assignment
Linguagem de código: Python ( python )
Usando o operador * no lado direito
Python permite que você use o *
operador do lado direito. Suponha que você tenha duas tuplas:
odd_numbers = (1, 3, 5)
even_numbers = (2, 4, 6)
Linguagem de código: Python ( python )
O exemplo a seguir usa o *
operador para descompactar essas tuplas e mesclá-las em uma única tupla:
numbers = (*odd_numbers, *even_numbers)
print(numbers)
Linguagem de código: Python ( python )
Saída:
(1, 3, 5, 2, 4, 6)
Linguagem de código: Python ( python )
Resumo
- Python usa vírgulas (
,
) para definir uma tupla, não parênteses. - Descompactar tuplas significa atribuir elementos individuais de uma tupla a múltiplas variáveis.
- Use o
*
operador para atribuir os elementos restantes de uma atribuição de descompactação em uma lista e atribuí-los a uma variável.