programandoai

Listas, for e range: repetindo sem copiar e colar

Imprimir dez preços copiando e colando dez vezes o mesmo print é um desperdício. Um laço faz o Python repetir uma instrução para cada item, sozinho.

Estudar esta lição interativa →

Imagine uma lista de preços de um carrinho de compras: imprimir cada um copiando e colando um print para cada item funciona para três produtos, mas vira um pesadelo de manter com trinta. É exatamente o problema que um laço resolve: uma única instrução que o Python repete, sozinho, uma vez para cada item de uma coleção.

Antes do laço, veja como criar e acessar uma lista, a coleção mais usada do Python:

precos = [8.9, 15.0, 22.5]

print(precos[0])
print(precos[1])
print(precos[2])

Índices começam em 0: precos[0] é o primeiro item, não o segundo.

Agora o laço for: ele pega, um de cada vez, todo item de uma lista (ou de qualquer outra coleção), executando o bloco recuado abaixo dele para cada um, na ordem, até acabar.

precos = [8.9, 15.0, 22.5]

for preco in precos:
    print(f"Preço: R$ {preco:.2f}")

Pense num for como alguém tirando, um de cada vez, cada item de dentro de uma caixa e fazendo a mesma coisa com ele antes de pegar o próximo: nunca pula um item, nunca repete, e para automaticamente quando a caixa esvazia.

Quando você precisa repetir algo um número específico de vezes (não necessariamente ligado a uma lista), range(n) gera uma sequência de números de 0 até n - 1, pronta para um for percorrer:

for numero in range(5):
    print(numero)

range(5) gera 0, 1, 2, 3, 4: cinco números, não seis.

range aceita início, fim e passo

range(2, 10, 2) começa em 2, para antes de chegar em 10, pulando de 2 em 2: gera 2, 4, 6, 8. O terceiro número (o passo) é opcional; sem ele, o padrão é andar de 1 em 1.

Acessar um índice que não existe quebra o programa

Uma lista com 3 itens tem índices válidos 0, 1 e 2, nunca 3. Tentar precos[3] numa lista de 3 itens gera IndexError: list index out of range, um dos erros mais comuns de quem está começando (geralmente por confundir "quantidade de itens" com "último índice válido"). O último índice válido é sempre len(lista) - 1, nunca len(lista).

Atribuir uma lista não copia a lista

Escrever b = a não cria uma lista nova: cria um segundo nome para a mesma lista. Mudar por um nome muda para o outro. Quando você quer uma cópia de verdade, use a.copy() (ou list(a), ou a[:]). Isso vale para todo tipo mutável do Python, como as listas e os dicionários que você vai ver adiante. Um aviso a mais: a cópia é rasa, então uma lista que guarda outras listas ainda compartilha as de dentro.

a = [1, 2, 3]
b = a          # b NÃO é uma cópia: é outro nome para a MESMA lista
b.append(4)
print(a)       # [1, 2, 3, 4]
print(a is b)  # True (o mesmo objeto)

c = a.copy()   # cópia de verdade (também: list(a) ou a[:])
c.append(5)
print(a)       # [1, 2, 3, 4]
print(c)       # [1, 2, 3, 4, 5]
print(a is c)  # False

b = a não copia. a.copy() copia.

for numero in range(5):
    print(numero)

Ajuste o range para imprimir de 1 a 5.

← Voltar ao índice do curso