Menu

Laço for em Python: iterar listas, strings, ranges e dicionários

Como o laço for do Python funciona — iterando sobre listas, strings, ranges, dicionários e qualquer outra coisa iterável, além de break, continue e else.

O for do Python é "para cada"

Se você veio de uma linguagem no estilo C, o for do Python vai parecer diferente. Não existe o padrão for (i = 0; i < n; i++) com contador. O for do Python é estritamente um laço para cada: você dá uma coleção e ele te entrega os itens um de cada vez.

main.py
Output
Click Run to see the output here.

Isso imprime três linhas. O Python lê a lista, tira cada elemento por vez e prende em color enquanto o corpo é executado. Quando não sobra nada, o laço termina.

Repare no formato — for <nome> in <iteravel>: seguido de um corpo indentado. Indentação, dois pontos, corpo; mesma estrutura do if.

O que conta como iterável

Praticamente qualquer coisa que contenha uma sequência de valores. Listas, tuplas, strings, ranges, dicionários, sets, arquivos e a maioria dos objetos customizados que você vai construir.

main.py
Output
Click Run to see the output here.

A uniformidade é o lado bom — uma sintaxe, muitos formatos de dados.

Contando com range()

Quando você quer um contador — "faça isso dez vezes" ou "percorra os índices 0 a 9" — use range():

main.py
Output
Click Run to see the output here.

Isso imprime 0, 1, 2, 3, 4. range(stop) conta de 0 até (mas sem incluir) stop. range(start, stop) permite definir um valor inicial, e range(start, stop, step) permite controlar o tamanho do passo:

main.py
Output
Click Run to see the output here.

Existe uma página dedicada a range mais adiante, porque vale entender um pouco mais a fundo. Por enquanto, range(n) te dá n iterações numeradas de 0 a n-1.

enumerate em Python: fazendo laço com índice

Uma necessidade comum: "quero o índice e o valor juntos". O instinto do iniciante é usar range(len(...)), mas o Python tem uma ferramenta melhor:

main.py
Output
Click Run to see the output here.

enumerate() produz pares (indice, valor). As duas variáveis depois do for desempacotam o par em dois nomes — index e color. Muito mais limpo do que:

main.py
Output
Click Run to see the output here.

Se quiser começar a contar do 1 em vez do 0, passe start=1:

main.py
Output
Click Run to see the output here.

zip em Python: iterando sobre duas sequências juntas

Quando você tem duas listas do mesmo tamanho e quer emparelhá-las:

main.py
Output
Click Run to see the output here.

zip para na sequência mais curta. Se você quiser que continue e preencha com None, use itertools.zip_longest.

Iterando um dicionário

Dicionários te dão opções sobre o que iterar:

main.py
Output
Click Run to see the output here.

Na maioria das vezes você quer .items() — você recebe a chave e o valor juntos numa linha legível.

break e continue

Às vezes você quer sair cedo ou pular uma iteração.

break sai do laço imediatamente:

main.py
Output
Click Run to see the output here.

Assim que um número maior que 6 é encontrado, o laço para. Os itens restantes são ignorados.

continue pula o resto da iteração atual e vai para a próxima:

main.py
Output
Click Run to see the output here.

Os dois são aceitáveis, embora o continue possa deixar os laços mais difíceis de acompanhar se você tiver mais de um. Muitas vezes um simples if/else se lê melhor.

A cláusula else num laço

Python tem um recurso que a maioria das linguagens não tem: uma cláusula else em laços. Ela roda quando o laço termina sem bater num break.

main.py
Output
Click Run to see the output here.

Útil, mas confuso no começo. Não se sinta obrigado a usar — uma flag booleana fora do laço costuma ser mais clara para leitores novos.

Modificar uma lista enquanto você itera

Uma armadilha que vale sinalizar: não adicione nem remova itens de uma lista enquanto está percorrendo ela. A iteração fica confusa sobre quais índices ainda são válidos e você ou perde itens ou dispara um erro. O padrão seguro é construir uma lista nova:

main.py
Output
Click Run to see the output here.

Ou, quando estiver mais à vontade, uma list comprehension faz a mesma coisa numa linha — vamos cobrir isso no capítulo de Coleções.

Um pequeno exemplo de ponta a ponta

Amarre algumas dessas peças — lê uma lista, filtra, enumera, imprime:

main.py
Output
Click Run to see the output here.

Próximo: laços while

for é a escolha certa quando você sabe sobre o que está iterando. while é a escolha certa quando você está em laço até alguma condição mudar — isso vem a seguir.

Perguntas frequentes

Como funciona um laço for em Python?

for item in sequencia: executa o corpo indentado uma vez para cada elemento da sequência, com item assumindo cada valor por vez. Sequências incluem listas, tuplas, strings, dicionários, ranges e qualquer objeto que defina um iterador.

Qual a diferença entre break e continue?

break sai do laço imediatamente, pulando qualquer iteração restante. continue pula o resto da iteração atual e vai para a próxima. break é para "terminei"; continue é para "pula esta".

Como fazer um laço com índice em Python?

Envolva a sequência em enumerate(...) para obter pares (indice, valor): for i, item in enumerate(items):. Muito mais limpo do que manter seu próprio contador com i += 1 no fim do laço.

Aprenda a programar com o Coddy

COMEÇAR