Desempacotando tuplas do Python

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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *