Listas em Python: guia prático com exemplos

Listas em Python explicadas do zero: como criar, acessar por índice, fatiar, adicionar e remover itens, percorrer com laço, ordenar e os métodos mais usados, com código que roda e erros comuns.

Revisado pela equipe editorial ValorFinalDocumentação oficial do Python e Python.org
Calcule agora: JSON FormatterResultado na hora, de graça e sem cadastro.

A lista é a estrutura de dados que você mais vai usar em Python. Ela guarda vários itens em ordem, aceita tipos misturados e cresce ou encolhe conforme o programa roda. Saber criar, acessar, fatiar, adicionar, remover e percorrer uma lista resolve boa parte das tarefas do dia a dia, de somar notas a filtrar nomes. Este guia mostra tudo isso com código que roda e aponta os erros que mais pegam quem está começando. Para estudar com playground no navegador, exercícios e certificado, use o curso de Python do zero, gratuito.

Resposta rápida

  • Crie com colchetes: frutas = ["maçã", "uva"].
  • Acesse por índice a partir do zero; frutas[-1] é o último item.
  • Cresça com append, insert e extend; encolha com remove, pop e del.
  • nova = antiga não copia; use antiga.copy() para uma lista independente.

Como criar uma lista

Uma lista nasce entre colchetes, com os itens separados por vírgula. Ela pode começar vazia e receber itens depois, ou já vir preenchida. Os itens não precisam ser do mesmo tipo, embora listas de um tipo só sejam as mais comuns.

frutas = ["maçã", "uva", "pera"]
numeros = [10, 20, 30, 40]
vazia = []
misturada = ["texto", 42, True, 3.14]

print(frutas)      # ['maçã', 'uva', 'pera']
print(len(numeros))  # 4

A função len devolve quantos itens a lista tem. Ela serve de base para muita coisa: saber se a lista está vazia, montar laços e evitar pedir um índice que não existe.

Acessar por índice, inclusive negativo

Cada item tem uma posição, chamada índice, que começa em zero. Para pegar um item, use o índice entre colchetes. Índice negativo conta de trás para frente, o que evita calcular o tamanho só para chegar ao final.

frutas = ["maçã", "uva", "pera", "kiwi"]

print(frutas[0])   # maçã (primeiro)
print(frutas[2])   # pera
print(frutas[-1])  # kiwi (último)
print(frutas[-2])  # pera (penúltimo)

frutas[1] = "banana"  # troca o item na posição 1
print(frutas)         # ['maçã', 'banana', 'pera', 'kiwi']

Como a lista é mutável, você também usa o índice para trocar um item no lugar, sem criar uma lista nova. Pedir um índice que não existe, como frutas[10] numa lista de quatro itens, para o programa com o erro IndexError.

Fatiamento (slicing): pegar um pedaço

O fatiamento recorta um trecho da lista com a sintaxe lista[inicio:fim]. O item do início entra, o do fim não. Se você omitir um dos lados, o Python assume o começo ou o final. Um terceiro número define o passo.

n = [0, 1, 2, 3, 4, 5]

print(n[1:4])   # [1, 2, 3] (do 1 até antes do 4)
print(n[:3])    # [0, 1, 2] (do começo)
print(n[3:])    # [3, 4, 5] (até o fim)
print(n[::2])   # [0, 2, 4] (de dois em dois)
print(n[::-1])  # [5, 4, 3, 2, 1, 0] (invertida)

O fatiamento sempre devolve uma lista nova, sem mexer na original. Por isso n[:] é um jeito rápido de copiar a lista inteira, e n[::-1] devolve uma versão invertida sem alterar a de origem.

Adicionar itens: append, insert e extend

Existem três formas principais de crescer uma lista, cada uma para uma situação. Escolha pelo resultado que você quer.

fila = ["ana", "bia"]

fila.append("caio")      # adiciona ao fim
print(fila)              # ['ana', 'bia', 'caio']

fila.insert(0, "duda")   # insere na posição 0
print(fila)              # ['duda', 'ana', 'bia', 'caio']

fila.extend(["edu", "fê"])  # junta item por item
print(fila)              # ['duda', 'ana', 'bia', 'caio', 'edu', 'fê']

Cuidado com a diferença entre append e extend. Se você fizer fila.append(["edu", "fê"]), a lista inteira entra como um único item, criando uma lista dentro da lista. O extend desmonta a sequência e adiciona cada item separado.

Remover itens: remove, pop e del

Para encolher a lista você tem três ferramentas. O remove apaga pelo valor, o pop apaga pela posição e ainda devolve o item retirado, e o del apaga por índice sem devolver nada.

cores = ["azul", "verde", "rosa", "verde"]

cores.remove("verde")   # apaga a PRIMEIRA ocorrência
print(cores)            # ['azul', 'rosa', 'verde']

ultima = cores.pop()    # tira e devolve o último
print(ultima)           # verde
print(cores)            # ['azul', 'rosa']

del cores[0]            # apaga por índice
print(cores)            # ['rosa']

Repare que remove apaga só a primeira ocorrência do valor. Se o item aparece mais de uma vez e você quer todos fora, precisa repetir ou usar outra técnica. Chamar remove com um valor que não existe gera ValueError.

Percorrer com for e verificar pertencimento com in

Para trabalhar com todos os itens, o laço for passa por cada um sem você precisar mexer em índices. Quando precisa também da posição, enumerate entrega índice e valor juntos. Para saber se um valor está na lista, o operador in devolve verdadeiro ou falso.

notas = [7, 5, 9, 4]

for nota in notas:
    print(nota)

for i, nota in enumerate(notas):
    print(i, nota)   # 0 7 / 1 5 / 2 9 / 3 4

print(9 in notas)    # True
print(10 in notas)   # False

O operador in é a forma correta de checar presença. Não é preciso escrever um laço só para procurar um item; deixe o Python fazer isso e leia melhor.

Ordenar: sort, sorted e reverse

O método sort ordena a própria lista no lugar e não devolve nada. A função sorted devolve uma lista nova ordenada e deixa a original como estava. O método reverse apenas inverte a ordem atual, sem ordenar.

valores = [3, 1, 4, 1, 5]

ordenada = sorted(valores)   # nova lista, original intacta
print(ordenada)              # [1, 1, 3, 4, 5]
print(valores)               # [3, 1, 4, 1, 5]

valores.sort(reverse=True)   # ordena a própria lista
print(valores)               # [5, 4, 3, 1, 1]

nomes = ["ana", "bia", "caio"]
nomes.sort(key=len)          # ordena pelo tamanho
print(nomes)                 # ['ana', 'bia', 'caio']

Use sorted quando ainda vai precisar da ordem original em outro ponto. O parâmetro key ordena por um critério, como o tamanho de cada texto, e reverse=True inverte para ordem decrescente.

List comprehension: montar listas em uma linha

A list comprehension cria uma lista nova a partir de outra, em uma linha, aplicando uma expressão a cada item e, se quiser, filtrando com uma condição. É idiomática em Python e mais enxuta que um laço com append.

numeros = [1, 2, 3, 4, 5, 6]

dobrados = [n * 2 for n in numeros]
print(dobrados)   # [2, 4, 6, 8, 10, 12]

pares = [n for n in numeros if n % 2 == 0]
print(pares)      # [2, 4, 6]

A leitura segue a fala: para cada n em numeros, pegue n * 2. A condição no fim mantém só os itens que passam no teste. Para transformações simples, prefira a comprehension; para lógica longa, um laço comum lê melhor.

Métodos de lista mais usados

MétodoO que faz
append(x)Adiciona um item ao fim da lista
insert(i, x)Insere o item x na posição i
extend(seq)Adiciona cada item de outra sequência
remove(x)Apaga a primeira ocorrência do valor x
pop(i)Tira e devolve o item da posição i (ou o último)
index(x)Devolve a posição da primeira ocorrência de x
count(x)Conta quantas vezes x aparece
sort()Ordena a própria lista no lugar
copy()Devolve uma cópia independente da lista

Cópia contra referência: o tropeço clássico

Este é o erro que mais confunde quem começa. Escrever nova = antiga não copia a lista: as duas variáveis passam a apontar para a mesma lista na memória. Mexer em uma altera a outra.

a = [1, 2, 3]
b = a          # NÃO copia, é o mesmo objeto
b.append(4)
print(a)       # [1, 2, 3, 4]  <- mudou junto!

c = a.copy()   # cópia de verdade (ou list(a), ou a[:])
c.append(9)
print(a)       # [1, 2, 3, 4]  <- intacta

Quando precisa de uma lista independente, use a.copy(), list(a) ou o fatiamento a[:]. Guardar essa diferença cedo evita bugs que parecem mágica.

Erros comuns com listas

O curso de Python do zero cobre listas, laços, fatiamento e os métodos deste guia com playground no navegador, exercícios corrigidos e certificado, sem custo. Depois de dominar as listas, avance para dicionários e classes no curso de Python intermediário.

Fontes

Conclusão

Lista é a coleção ordenada e mutável do Python: você cria com colchetes, acessa por índice (inclusive negativo), recorta com fatiamento, cresce com append, insert e extend, encolhe com remove, pop e del, percorre com for e ordena com sort ou sorted. Guarde a diferença entre cópia e referência e você evita o bug mais comum. A melhor forma de fixar é escrever e testar. Para praticar com playground, exercícios e certificado gratuitos, use o curso de Python do zero e conheça todos os cursos gratuitos do ValorFinal.

Calculadoras deste guia

Fontes oficiais

Links externos para os documentos oficiais consultados na construção desta página. O conteúdo deles pode mudar sem aviso; em caso de divergência, vale sempre a fonte oficial.

Como validamos os cálculos

Os valores citados neste guia são estimativos e baseados em fontes oficiais (Documentação oficial do Python e Python.org). Eles podem variar conforme convenção coletiva, situação individual e atualizações da legislação. Entenda nossa metodologia em como validamos os cálculos.

Perguntas frequentes

O que é uma lista em Python?
É uma coleção ordenada de itens, guardada entre colchetes e separada por vírgula. Uma lista pode ter números, textos, outras listas e tipos misturados no mesmo lugar. Ela mantém a ordem em que você colocou os itens e pode crescer ou encolher durante o programa. É a estrutura de dados mais usada em Python no dia a dia, do primeiro script ao projeto grande.
Como acessar um item específico de uma lista?
Use o índice entre colchetes, começando do zero. Em uma lista frutas, frutas[0] é o primeiro item e frutas[1] é o segundo. Índice negativo conta de trás para frente: frutas[-1] é o último item e frutas[-2] é o penúltimo. Isso evita ter que calcular o tamanho da lista só para pegar o final. Pedir um índice que não existe gera o erro IndexError.
Qual a diferença entre append e extend?
O append adiciona um único item ao fim da lista, mesmo que esse item seja outra lista, que entra inteira como um só elemento. O extend recebe uma sequência e adiciona cada item dela um por um ao fim. Se você tem [1, 2] e faz append([3, 4]), fica [1, 2, [3, 4]]. Com extend([3, 4]) fica [1, 2, 3, 4]. Escolha pelo resultado que quer.
Como ordenar uma lista sem alterar a original?
Use a função sorted, que devolve uma lista nova ordenada e deixa a original intacta. Já o método sort ordena a própria lista no lugar e não devolve nada. Prefira sorted quando ainda precisa da ordem original em outro ponto do código. Os dois aceitam reverse=True para ordem decrescente e o parâmetro key para ordenar por um critério, como o tamanho de cada texto.
Por que minha cópia da lista muda junto com a original?
Porque escrever nova = antiga não copia os itens: as duas variáveis apontam para a mesma lista na memória. Mexer em uma reflete na outra. Para copiar de verdade, use antiga.copy(), list(antiga) ou o fatiamento antiga[:], que criam uma lista independente. É um dos tropeços mais comuns de quem está começando, e entender referência contra cópia evita bugs difíceis de achar.
Onde pratico listas em Python sem instalar nada?
Dá para rodar tudo no navegador. O curso de Python do zero do ValorFinal tem um playground que executa o código na própria página, então você cria listas, fatia, ordena e percorre com laço vendo o resultado na hora, sem configurar ambiente. É a forma mais rápida de fixar cada método escrevendo e testando por conta própria.