Trilha de aprendizado · Nível 3 · Tutorial 4

Agrupar e desempacotar valores com tuplas

Representar grupos posicionais de valores com tuplas e distribuir os elementos de uma sequência entre variáveis por desempacotamento.

  • Nível: Iniciante
  • Duração: 16 min
  • 7 passos
Agrupar e desempacotar valores com tuplas

O que você vai percorrer

  1. Criar tuplas e reconhecer o papel da vírgula Crie tuplas com zero, um ou vários elementos e converta listas e textos preservando sua ordem. 2 min
  2. Escolher a coleção e consultar posições Escolha entre lista e tupla e diferencie consultar uma posição de tentar alterar seu elemento. 2 min
  3. Distribuir valores entre variáveis Distribua os elementos de tuplas, listas e textos entre variáveis, respeitando a ordem e a quantidade de destinos. 2 min
  4. Reconhecer quantidades incompatíveis Identifique excessos e faltas de elementos no desempacotamento e corrija a incompatibilidade sem perder informações importantes. 2 min
  5. Reunir os elementos restantes com asterisco Use um destino com asterisco para reunir os valores restantes em uma lista e reconheça quando ainda faltam elementos. 3 min
  6. Trocar valores com uma atribuição Troque os valores de duas variáveis e entenda por que o desempacotamento preserva os valores originais. 1 min
  7. Aplicar tuplas em um trajeto e revisar Complete um programa local para consultar um trajeto, separar seus pontos e trocar origem e destino sem alterar a tupla. 4 min

O que você vai aprender

  • Criar tuplas vazias, unitárias e com vários elementos.
  • Escolher entre uma lista modificável e uma tupla para um agrupamento posicional fixo.
  • Acessar posições de uma tupla sem tentar substituir seus elementos.
  • Desempacotar sequências respeitando a quantidade de destinos.
  • Usar um destino com asterisco para reunir os elementos restantes.

Antes de começar

  • Organizar e atualizar dados em listas

Passo 1 de 7

Criar tuplas e reconhecer o papel da vírgula

Crie tuplas com zero, um ou vários elementos e converta listas e textos preservando sua ordem.

Valores agrupados por posição

Uma tupla é uma sequência ordenada: ela agrupa valores por posição, inclusive de tipos diferentes. Agrupar valores assim é chamado de empacotamento.

Para um ou mais elementos, a vírgula forma a tupla; os parênteses deixam o agrupamento claro. Sem elementos, use () ou tuple().

Observe onde aparece a vírgula

python
pessoa = ("Ana", 28, 1.65)
pessoa_sem_parenteses = "Ana", 28, 1.65

apenas_texto = ("Ana")  # É uma string
um_elemento = ("Ana",)  # É uma tupla

vazia = ()
outra_vazia = tuple()
Uma tupla com três elementos em ordem: o texto "Ana", o inteiro 28 e o número decimal 1.65. Cada valor ocupa uma posição distinta dentro do mesmo agrupamento.

Em pessoa, texto e números fazem parte da mesma sequência, nessa ordem.

Um elemento ainda precisa de vírgula

Qual expressão cria uma tupla com exatamente um elemento?

Transformar uma sequência em tupla

tuple(sequencia) cria uma tupla com os elementos da sequência, na mesma ordem.

Ao converter uma lista, cada elemento dela vira um elemento da tupla. Ao converter um texto, cada caractere vira um elemento.

Lista e texto como origem

Você pode executar estes exemplos no seu Python. Os comentários mostram as saídas esperadas.

python
cores = ["azul", "verde"]
print(tuple(cores))  # ('azul', 'verde')

print(tuple("sol"))  # ('s', 'o', 'l')
print(tuple(["sol"]))  # ('sol',)
print(tuple())  # ()

Dica

Um texto inteiro ou seus caracteres?

("sol",) guarda o texto inteiro como um elemento. Já tuple("sol") percorre o texto para formar uma tupla com três caracteres.

Preveja o resultado

Relacione cada expressão à tupla que ela produz.

Toque em um item e depois no par correspondente.

Passo 2 de 7

Escolher a coleção e consultar posições

Escolha entre lista e tupla e diferencie consultar uma posição de tentar alterar seu elemento.

A estrutura precisa mudar?

Use uma lista quando precisar substituir, acrescentar ou remover elementos da sequência.

Use uma tupla para um agrupamento por posição cuja estrutura deve permanecer fixa. Na mesma tupla, não é possível substituir elementos nem acrescentar ou remover posições: sua estrutura é imutável.

Exemplo

Escolha pela necessidade

Uma lista de compras que receberá novos produtos combina com uma lista: ["arroz", "feijão"].

Um ponto definido por duas coordenadas que não serão alteradas combina com uma tupla: (10, 20). A primeira posição representa x; a segunda, y.

Associe a necessidade à coleção

Associe cada situação à escolha mais adequada.

Toque em um item e depois no par correspondente.

Consultar não é substituir

Os índices que você já conhece também funcionam nas tuplas. Em ponto = (10, 20), ponto[0] consulta o primeiro elemento e ponto[-1], o último. Já usar uma posição como destino de uma atribuição tenta substituir seu elemento.

Leitura permitida, substituição bloqueada

Se executar este código no seu Python, as duas consultas funcionarão; a última linha provocará um erro.

python
ponto = (10, 20)

print(ponto[0])   # 10
print(ponto[-1])  # 20

ponto[0] = 15     # TypeError
Comparação: ponto[0] lê o valor 10 de uma tupla (10, 20); ponto[0] = 15 tenta substituir 10 por 15, mas a operação é bloqueada e a tupla permanece (10, 20).

Ler uma posição é permitido; substituir seu elemento não é.

Atenção

Como reconhecer o erro

A tentativa de atribuir a uma posição gera TypeError: 'tuple' object does not support item assignment. Isso indica que a tupla não aceita esse tipo de alteração. A tentativa não substitui o valor 10 por 15.

Qual operação é válida?

Considere ponto = (10, 20). Qual linha exibe 20 sem tentar alterar a tupla?

Passo 3 de 7

Distribuir valores entre variáveis

Distribua os elementos de tuplas, listas e textos entre variáveis, respeitando a ordem e a quantidade de destinos.

De um grupo para várias variáveis

Você já agrupou valores em uma tupla. Agora, o desempacotamento faz o caminho inverso: distribui os elementos de uma sequência entre variáveis.

Os nomes à esquerda do = são os destinos. O primeiro recebe o primeiro elemento, o segundo recebe o segundo, e assim por diante. Nesta forma de atribuição, a quantidade de destinos deve ser igual à quantidade de elementos.

Agrupar e depois distribuir

python
cadastro = ("Lia", 28, "Recife")  # Agrupa os valores
nome, idade, cidade = cadastro  # Distribui os elementos

print(nome)    # Lia
print(idade)   # 28
print(cidade)  # Recife
Três elementos de cadastro ligados aos respectivos destinos: "Lia" para nome, 28 para idade e "Recife" para cidade.

A correspondência depende da posição, não do nome escolhido para a variável.

Complete os destinos

Complete a atribuição para que x receba o primeiro elemento e y receba o segundo:

___ = (4, 9)

Também funciona com listas e textos

A sequência à direita não precisa ser uma tupla. Você pode desempacotar uma lista ou um texto diretamente, sem usar tuple().

No texto, cada caractere é um elemento. A regra continua a mesma: um elemento por destino, na ordem.

Duas sequências, a mesma regra

Observe os valores recebidos em cada atribuição.

python
largura, altura = [800, 600]
print(largura)  # 800
print(altura)   # 600

primeira, segunda = "Oi"
print(primeira)  # O
print(segunda)   # i

Acompanhe cada valor

Considere estas atribuições e associe cada variável ao valor que ela recebe:

inicio, fim = ["Norte", "Sul"]

letra, digito = "A7"

Toque em um item e depois no par correspondente.

Passo 4 de 7

Reconhecer quantidades incompatíveis

Identifique excessos e faltas de elementos no desempacotamento e corrija a incompatibilidade sem perder informações importantes.

Quando sobram elementos

No desempacotamento simples, conte os elementos da sequência e os destinos à esquerda do =. Se as quantidades forem diferentes, ocorre um ValueError.

Aqui, há três elementos para apenas dois destinos: sobra um elemento. Python não ignora essa sobra.

Três valores, dois destinos

python
trajeto = ("Casa", "Praça", "Escola")
origem, destino = trajeto
# ValueError: too many values to unpack (expected 2)
Diagrama de incompatibilidade: três elementos na linha superior e dois destinos na inferior. O terceiro elemento não tem destino correspondente.

A mensagem “too many values to unpack” indica excesso de elementos. A atribuição não é concluída.

Corrigir sem perder a parada

Para trajeto = ("Casa", "Praça", "Escola"), você precisa guardar a origem, a parada e o destino em variáveis separadas. Qual correção atende a essa intenção?

Quando faltam elementos

O contrário também causa ValueError: há menos elementos do que destinos. A mensagem abaixo informa que eram esperados três valores, mas foram recebidos dois.

Dois valores, três destinos

python
trajeto = ("Casa", "Escola")
origem, parada, destino = trajeto
# ValueError: not enough values to unpack (expected 3, got 2)

Dica

A intenção orienta a correção

Se o trajeto é direto, use origem, destino = trajeto. Se deveria incluir uma parada, corrija os dados para incluí-la. Você pode conferir os elementos com len(trajeto) e contar os destinos à esquerda do =. Não apague nem invente informações só para igualar as quantidades.

Diagnostique e repare

O trajeto confirmado é Casa → Museu → Escola, mas o código foi escrito assim:

trajeto = ("Casa", "Escola")
origem, parada, destino = trajeto

Qual erro ocorre? Faltam ou sobram elementos? Reescreva as duas linhas para representar o trajeto confirmado.

Escreva pelo menos 25 caracteres (0/25).

Passo 5 de 7

Reunir os elementos restantes com asterisco

Use um destino com asterisco para reunir os valores restantes em uma lista e reconheça quando ainda faltam elementos.

Um destino reúne o restante

No desempacotamento simples, as quantidades precisam ser iguais. Com um destino marcado por *, os destinos sem asterisco recebem um elemento cada, e o destino com asterisco reúne o restante em uma lista, mesmo que a origem seja uma tupla.

O asterisco pode ficar no início, no meio ou no fim. Os valores mantêm sua ordem: destinos antes dele recebem elementos do início; destinos depois dele recebem elementos do fim.

Três posições possíveis

python
valores = (10, 20, 30, 40)

primeiro, *restantes = valores
print(primeiro, restantes)  # 10 [20, 30, 40]

*restantes, ultimo = valores
print(restantes, ultimo)  # [10, 20, 30] 40

primeiro, *restantes, ultimo = valores
print(primeiro, restantes, ultimo)  # 10 [20, 30] 40
Distribuição de (10, 20, 30, 40): primeiro recebe 10, restantes recebe a lista [20, 30] e ultimo recebe 40.

Com o asterisco no meio, os destinos individuais recebem as pontas e a lista reúne os elementos centrais.

A posição muda a distribuição

Considere dados = (2, 4, 6, 8). Associe cada atribuição aos valores recebidos.

Toque em um item e depois no par correspondente.

Pode não sobrar nada — mas não pode faltar

Se os destinos sem asterisco consumirem todos os elementos, o destino com asterisco recebe []. Isso é válido.

Mas cada destino sem asterisco ainda precisa receber um elemento. Se não houver elementos suficientes para eles, ocorre ValueError.

Lista vazia não é erro

Compare os dois casos. A última atribuição provoca um erro intencional.

python
primeiro, *meio, ultimo = (10, 40)
print(primeiro, meio, ultimo)  # 10 [] 40

# Há dois destinos sem asterisco, mas só um elemento:
primeiro, *meio, ultimo = (10,)  # ValueError

Atenção

Apenas um destino com asterisco

Neste desempacotamento simples, use no máximo um destino com *. Uma atribuição como *inicio, *fim = (10, 20, 30) é inválida e gera SyntaxError: não se pode dividir o restante entre dois destinos com asterisco.

Vazio ou insuficiente?

Qual atribuição é válida e faz meio receber uma lista vazia?

Passo 6 de 7

Trocar valores com uma atribuição

Troque os valores de duas variáveis e entenda por que o desempacotamento preserva os valores originais.

Uma atribuição para fazer a troca

Para trocar os valores de a e b, use a, b = b, a. O lado direito é avaliado antes de atribuir valores aos destinos: os valores originais são agrupados na ordem b, a e depois distribuídos para a, b.

python
a = 10
b = 20

a, b = b, a

print(a, b)  # 20 10
Antes da troca, a vale 10 e b vale 20. O lado direito b, a fornece o par 20, 10. Esse par é distribuído para os destinos: a recebe 20 e b recebe 10.

Os dois valores originais são obtidos antes de qualquer destino receber o novo valor.

O que acontece primeiro?

Com a = 10 e b = 20, ordene as etapas conceituais de a, b = b, a.

  1. Agrupar esses valores na ordem do lado direito: (20, 10).
  2. Distribuir o par para os destinos: a recebe 20 e b recebe 10.
  3. Ler os valores originais: b vale 20 e a vale 10.

Por que duas atribuições não fazem a troca?

Uma tentativa diferente

python
a = 10
b = 20

a = b
b = a

print(a, b)

Na linha a = b, a já passa a valer 20. Quando b = a é executada, ela lê esse novo valor de a, não o 10 original. As duas linhas são executadas separadamente; por isso, não equivalem a a, b = b, a.

Preveja o resultado

Partindo de a = 10 e b = 20, executamos a = b e depois b = a. Complete a saída de print(a, b): ____

Passo 7 de 7

Aplicar tuplas em um trajeto e revisar

Complete um programa local para consultar um trajeto, separar seus pontos e trocar origem e destino sem alterar a tupla.

Um trajeto definido

Você vai representar o trajeto Parque → Museu → Praça → Estação. Neste programa, os quatro pontos e sua ordem devem permanecer fixos: uma tupla é adequada. Se fosse necessário acrescentar ou remover pontos na mesma coleção, uma lista seria mais apropriada.

Quatro pontos, três partes

Trajeto com Parque, Museu, Praça e Estação, nessa ordem. Parque é a origem; Museu e Praça formam as paradas intermediárias; Estação é o destino.

O desempacotamento com asterisco separará o primeiro ponto, os pontos intermediários e o último ponto.

Complete e execute no seu computador

No seu editor, crie o arquivo trajeto.py com o código abaixo. Substitua cada comentário TODO por uma atribuição:

  1. Distribua os quatro pontos entre ponto1, ponto2, ponto3 e ponto4.
  2. Extraia origem, paradas e destino, reunindo os pontos intermediários com asterisco.
  3. Troque apenas os valores de origem e destino em uma atribuição.

Salve e execute com o Python 3 do seu computador.

Código-base

python
trajeto = ("Parque", "Museu", "Praça", "Estação")

print(f"Consulta: {trajeto[0]} / {trajeto[-1]}")

# TODO 1: desempacote trajeto em ponto1, ponto2, ponto3 e ponto4
print(f"Pontos: {ponto1} / {ponto2} / {ponto3} / {ponto4}")

# TODO 2: desempacote trajeto em origem, paradas e destino
print(f"Origem: {origem}")
print(f"Paradas: {paradas}")
print(f"Destino: {destino}")

# TODO 3: troque os valores de origem e destino
print(f"Após a troca: {origem} / {destino}")
print(f"Tupla: {trajeto}")

Dica

Antes de executar

Complete os três TODOs para que todas as variáveis existam quando os comandos print forem executados. No desempacotamento exato, confira os quatro destinos; no estendido, marque somente paradas com asterisco.

Explique o que aconteceu

Seu resultado

Depois de executar, relate os pontos consultados, os quatro valores do desempacotamento exato, a origem, a lista de paradas e o destino. O que mudou após a troca? A tupla mudou? Justifique a escolha de tupla para esse trajeto.

Escreva pelo menos 60 caracteres (0/60).

Confira e leve as regras com você

Saída esperada

Compare com a saída no seu computador. A troca das variáveis não inverte a tupla do trajeto.

text
Consulta: Parque / Estação
Pontos: Parque / Museu / Praça / Estação
Origem: Parque
Paradas: ['Museu', 'Praça']
Destino: Estação
Após a troca: Estação / Parque
Tupla: ('Parque', 'Museu', 'Praça', 'Estação')

Resumo

Revisão: agrupar e desempacotar

  • Criação: () ou tuple() cria uma tupla vazia; (valor,) cria uma unitária; vírgulas agrupam vários valores. tuple(sequência) preserva a ordem ao converter listas e textos.
  • Escolha e acesso: use lista para uma sequência modificável e tupla para um agrupamento posicional fixo. Índices consultam a tupla; atribuir a uma posição causa TypeError.
  • Desempacotamento exato: tuplas, listas e textos distribuem elementos da esquerda para a direita. Sem asterisco, quantidades diferentes de elementos e destinos causam ValueError.
  • Asterisco: um único destino marcado reúne o restante em uma lista, até mesmo vazia. Ainda são necessários elementos suficientes para os destinos sem asterisco.
  • Troca: origem, destino = destino, origem preserva os valores originais porque o lado direito é avaliado antes das atribuições. A tupla de origem permanece intacta.

Tutorial concluído

Parabéns! Você concluiu: Agrupar e desempacotar valores com tuplas

Você aplicou tuplas a um trajeto definido, consultou posições e distribuiu valores com e sem asterisco — incluindo uma troca de variáveis sem alterar o agrupamento original.

Baixe o Aplicativo agora para ter acesso a + de 5000 cursos gratuitos, exercícios, certificado e muito conteúdo sem pagar nada!

  • Cursos online 100% gratuitos do início ao fim

    Milhares de cursos online em vídeo, ebooks e áudiobooks.

  • Mais de 60 mil exercícios gratuitos

    Para testar seus conhecimentos no decorrer dos cursos online

  • Certificado Digital gratuito válido em todo o Brasil

    Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail

Aplicativo Cursa na tela de ebook, na tela de curso em vídeo e na tela de exercícios do curso, mais o certificado de conclusão de curso