
Passo 1 de 6
Obter posição e valor com enumerate
Receba a posição e o elemento diretamente no for, sem criar nem atualizar um contador.
Trilha de aprendizado · Nível 3 · Tutorial 5
Percorrer sequências mantendo a posição de cada elemento ou associando valores de sequências diferentes, sem gerenciar contadores manualmente.
Obter posição e valor com enumerate
Receba a posição e o elemento diretamente no for, sem criar nem atualizar um contador. 2 min
Escolher onde a numeração começa
Use start para escolher a numeração de enumerate sem alterar os índices nem a ordem dos elementos. 2 min
Associar duas sequências com zip
Use zip para percorrer duas sequências e associar os valores que estão na mesma posição. 2 min
Prever onde zip termina
Preveja quantos pares serão formados e quais valores ficarão fora do laço quando as sequências tiverem comprimentos diferentes. 2 min
Conferir comprimentos antes de associar
Use len e if para impedir um percurso parcial quando todos os elementos precisarem de correspondência. 2 min
Aplicar e revisar: participantes e pontuações
Complete um relatório com participantes numerados e pontuações associadas, conferindo os comprimentos antes de usar zip. 3 min

Passo 1 de 6
Receba a posição e o elemento diretamente no for, sem criar nem atualizar um contador.
Quando você precisa da posição e do valor de cada elemento, use enumerate. Por padrão, ele produz pares com numeração a partir de zero.
No for, o par é desempacotado diretamente nas duas variáveis: a primeira recebe a posição; a segunda, o elemento.
Observe que não há contador para inicializar nem incrementar.
frutas = ["figo", "pera", "uva"]
for posicao, fruta in enumerate(frutas):
print(posicao, fruta)
Cada coluna representa uma passagem do laço: a saída será 0 figo, depois 1 pera e depois 2 uva.
Complete a lacuna usando numero para a posição e cor para o elemento. Escreva os dois nomes separados por vírgula.
cores = ["azul", "verde", "azul"]
for ___ in enumerate(cores):
print(numero, cor)Leia o código e preveja os valores antes de executá-lo. Se quiser conferir, use seu ambiente Python no computador.
cores = ["azul", "verde", "azul"]
for numero, cor in enumerate(cores):
print(numero, cor)Na terceira passagem do laço, quais valores as variáveis recebem?

Passo 2 de 6
Use start para escolher a numeração de enumerate sem alterar os índices nem a ordem dos elementos.
Para apresentar uma lista numerada a partir de 1, use start=1 em enumerate. O primeiro elemento recebe esse número, e a numeração aumenta de um em um.
nomes = ["Bia", "Caio", "Lia"]
for numero, nome in enumerate(nomes, start=1):
print(numero, nome)Exemplo
1 Bia
2 Caio
3 Lia
No código anterior, se trocarmos apenas start=1 por start=7, qual será a saída?
start muda apenas a numeração produzida por enumerate: não pula elementos, não muda sua ordem e não modifica a lista. Bia continua no índice 0, mesmo quando recebe o número 7.

Leia cada coluna: o elemento e seu índice permanecem iguais; só a numeração muda.
Na lista nomes = ["Bia", "Caio", "Lia"], Bia recebeu o número 7 em um percurso com start=7. Complete com o índice para acessar Bia diretamente: nomes[___].

Passo 3 de 6
Use zip para percorrer duas sequências e associar os valores que estão na mesma posição.
Para associar valores de duas sequências, use zip. Ele forma pares por posição: primeiro com primeiro, segundo com segundo, e assim por diante.
Considere participantes = ["Ana", "Bia", "Caio"] e pontos = [8, 10, 6]. As duas listas têm três elementos.

zip associa pela posição: não procura valores iguais nem reorganiza as listas.
Em zip(["Ana", "Bia", "Caio"], [8, 10, 6]), associe cada participante aos seus pontos.
Toque em um item e depois no par correspondente.
Em for participante, pontuacao in zip(participantes, pontos), o primeiro destino recebe um valor da primeira sequência; o segundo recebe um valor da segunda.
Diferentemente de enumerate, zip não acrescenta uma numeração: os dois valores vêm das sequências fornecidas.
participantes = ["Ana", "Bia", "Caio"]
pontos = [8, 10, 6]
for participante, pontuacao in zip(participantes, pontos):
print(f"{participante}: {pontuacao} pontos")Exemplo
Ana: 8 pontos
Bia: 10 pontos
Caio: 6 pontos
Agora as sequências aparecem na ordem inversa na chamada de zip.
participantes = ["Ana", "Bia", "Caio"]
pontos = [8, 10, 6]
for pontuacao, participante in zip(pontos, participantes):
print(pontuacao, participante)Qual será a primeira linha impressa?

Passo 4 de 6
Preveja quantos pares serão formados e quais valores ficarão fora do laço quando as sequências tiverem comprimentos diferentes.
No uso padrão, zip para assim que uma das sequências termina. A quantidade de pares é igual ao menor dos dois comprimentos, não importa qual sequência venha primeiro na chamada.
nomes = ["Ana", "Bia", "Caio"]
notas = [8, 6]
for nome, nota in zip(nomes, notas):
print(nome, nota)
A saída tem apenas duas linhas: Ana 8 e Bia 6. Caio não participa do laço, mas continua na lista nomes.
Atenção
Nesse uso, zip não avisa que os comprimentos diferem. Os valores excedentes não entram no laço e não são removidos das listas originais.
nomes = ["Ana", "Bia"]
notas = [8, 6, 9, 7]
for nome, nota in zip(nomes, notas):
print(nome, nota)Quantos pares serão formados? Quais notas não participarão do laço? Elas continuarão na lista original?
Escreva pelo menos 10 caracteres (0/10).
Se uma das sequências estiver vazia, o menor comprimento será zero. Não haverá nenhum par, e o corpo do for não será executado.
Ana e Bia continuam na lista, mas nenhum nome participa do laço.
nomes = ["Ana", "Bia"]
notas = []
for nome, nota in zip(nomes, notas):
print(nome, nota)Associe cada chamada ao número de pares e aos valores que não participarão do laço.
Toque em um item e depois no par correspondente.

Passo 5 de 6
Use len e if para impedir um percurso parcial quando todos os elementos precisarem de correspondência.
Se a tarefa aceita apenas os pares disponíveis, o encerramento padrão de zip pode servir. Mas, se cada produto precisa ter um preço, deixar elementos de fora não serve.
Nesse caso, compare os comprimentos antes do laço: só execute o percurso quando forem iguais.

Com essa conferência, comprimentos diferentes impedem o laço inteiro, não apenas o processamento do elemento excedente.
O for fica dentro do if. Assim, ele só é executado quando a comparação é verdadeira.
produtos = ["Caderno", "Caneta", "Borracha"]
precos = [18, 4]
if len(produtos) == len(precos):
for produto, preco in zip(produtos, precos):
print(f"{produto}: R$ {preco}")
else:
print("Confira os dados: as quantidades são diferentes.")Exemplo
Como os comprimentos são 3 e 2, aparece apenas:
Confira os dados: as quantidades são diferentes.
Nenhum produto é associado a um preço.
Dica
A conferência garante apenas quantidades iguais. Se os preços estiverem em outra ordem, o teste ainda passa e zip associa cada produto ao preço na mesma posição. Confira também a ordem dos dados.
Ordene os blocos para mostrar cada livro com seu número de páginas somente quando as quantidades forem iguais. Preserve a indentação mostrada.

Passo 6 de 6
Complete um relatório com participantes numerados e pontuações associadas, conferindo os comprimentos antes de usar zip.
Seu relatório terá dois percursos separados:
enumerate: apresentar os participantes com numeração a partir de 1.zip: associar cada participante à pontuação na mesma posição, somente se os comprimentos forem iguais.A numeração é de apresentação: o participante número 1 continua no índice 0.

À esquerda, número e elemento; à direita, elementos de duas listas associados pela posição.
Copie o código-base para seu editor e substitua os três ___:
enumerate para numerar participantes a partir de 1.zip, com participantes antes de pontuações.Execute com Python 3. Depois, retire apenas o último valor de pontuacoes, deixando [8, 6], e execute novamente. Observe quais linhas continuam aparecendo.
Os espaços marcados com ___ precisam ser substituídos antes da execução.
participantes = ["Ana", "Bia", "Caio"]
pontuacoes = [8, 6, 9]
for numero, nome in ___:
print(f"{numero}. {nome}")
if ___:
for nome, pontos in ___:
print(f"{nome}: {pontos} pontos")
else:
print("Pontuações não exibidas: comprimentos diferentes.")Dica
O primeiro percurso independe das pontuações. A condição protege apenas o segundo: neste relatório, não queremos mostrar associações parciais.
Relate as saídas das duas execuções. Por que enumerate atende à primeira tarefa e zip à segunda? Explique também por que Ana aparece com o número 1, embora esteja no índice 0, e o que impediu a exibição parcial das pontuações.
Escreva pelo menos 60 caracteres (0/60).
Resumo
Parabéns! Você concluiu: Percorrer sequências com enumerate e zip
Milhares de cursos online em vídeo, ebooks e áudiobooks.
Para testar seus conhecimentos no decorrer dos cursos online
Gerado diretamente na galeria de fotos do seu celular e enviado ao seu e-mail
Baixe nosso aplicativo pelo QR Code ou pelos links abaixo:.
+ de 10 milhões
de alunos
Certificado grátis e
válido em todo o Brasil
60 mil exercícios
gratuitos
4,8/5 classificação
nas lojas de apps
Cursos gratuitos em
vídeo, ebooks e audiobooks