Menu

Listas em Python: como criar, indexar, adicionar, ordenar e iterar

Um passeio prático pelas listas em Python — a coleção mais comum — cobrindo criação, indexação, fatiamento, append, sort e os padrões que você mais vai usar.

Listas são sequências ordenadas e mutáveis

A lista é o tipo de coleção mais usado em Python. Se você está mantendo um conjunto ordenado de valores que pode mudar — adicionar, remover, ordenar, atualizar — uma lista é quase sempre a escolha certa.

Crie uma com colchetes:

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

Listas podem conter qualquer coisa, até outras listas. Na prática, a maioria das listas acaba contendo um tipo só de coisa — uma lista de usuários, uma lista de números — porque é o que é mais fácil de raciocinar.

Indexação

Cada item tem uma posição, começando em 0. Acesse com colchetes:

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

Pedir um índice que não existe gera IndexError. Se você pode estar fora de alcance, ou confira o tamanho antes ou envolva o acesso num try.

Fatiamento

Fatiamento te dá um intervalo de itens. A sintaxe é lista[start:stop:step], igual a strings:

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

Duas coisas para fixar:

  • Fatiamento sempre retorna uma nova lista. Modificar a fatia não afeta a original.
  • O índice stop é exclusivo — nums[2:5] dá os índices 2, 3 e 4, não 5.

Como adicionar, estender e inserir itens

Os três métodos de "adicionar a uma lista" fazem coisas diferentes, e misturar eles é fonte comum de bug:

main.py
Output
Click Run to see the output here.
  • append(x) adiciona x como um único elemento — mesmo que x seja uma lista. items.append([1, 2]) adiciona a lista em si como uma entrada.
  • extend(iteravel) adiciona cada item do iterável. items.extend([1, 2]) adiciona duas entradas.
  • insert(i, x) insere num índice específico, deslocando tudo que está em i ou depois uma posição para a direita.

+= com uma lista à direita funciona como extend:

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

E para remover:

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

Se você tentar remove() algo que não está na lista, o Python gera ValueError. Se precisa de "remover se presente", ou cheque in antes ou use um try.

Você também pode deletar por índice com del:

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

Tamanho, pertinência, contagem

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

in é o jeito legível de checar se uma lista contém um valor. Se você vai fazer essa pergunta muitas vezes sobre uma lista grande, use um set — pertinência em set é O(1) onde pertinência em lista é O(n).

Ordenando

Duas formas, e a escolha importa:

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

As duas aceitam reverse=True para ordem decrescente:

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

E uma função key para ordenação customizada:

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

key é aplicada a cada item, e o resultado é o que é comparado. Casos comuns: ordenar por tamanho, por um atributo específico ou pela forma minúscula de uma string.

Invertendo

Três sabores, dependendo do que você precisa:

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

Use in place quando não precisa da original. Use fatiamento quando quer uma cópia nova. Use reversed() quando só precisa iterar em ordem inversa sem materializar uma lista nova.

A armadilha da referência compartilhada

Listas são mutáveis, e variáveis são referências. Isso significa que duas variáveis podem apontar para a mesma lista:

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

b = a não copiou a lista; deu a b um segundo nome para a mesma lista. Se você quer uma cópia, peça uma:

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

Isso morde todo programador Python pelo menos uma vez. Lembre: = entre duas listas não copia.

Percorrendo e construindo

Você já conhece o padrão básico da página do laço for:

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

Isso é legível e sempre vai estar bem. Quando estiver à vontade, o equivalente com list comprehension faz a mesma coisa em uma linha:

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

Vamos cobrir comprehensions em detalhe duas páginas à frente.

Folha de cola rápida

Métodos que vale conhecer, num relance:

  • append(x) — adiciona ao fim
  • extend(iter) — adiciona cada item de um iterável
  • insert(i, x) — insere no índice i
  • pop() / pop(i) — remove e retorna
  • remove(x) — remove a primeira ocorrência de x
  • sort() / sort(key=...) / sort(reverse=True)
  • reverse()
  • index(x) — posição do primeiro x
  • count(x) — número de x's
  • copy() — cópia rasa

Próxima

Listas são o cavalo de batalha. A seguir vamos olhar tuplas — a prima imutável — e quando pegar uma tupla em vez é a escolha melhor.

Perguntas frequentes

Como crio uma lista em Python?

Use colchetes com valores separados por vírgula: frutas = ['maca', 'banana', 'cereja']. Listas podem conter qualquer tipo, e você pode misturar tipos na mesma lista, embora a maioria das listas reais seja homogênea por costume.

Como ordeno uma lista em Python?

Chame .sort() na lista para ordenar in place, ou use a função embutida sorted(lista) para obter uma nova lista ordenada sem mexer na original. As duas aceitam uma flag reverse=True para ordem decrescente e um argumento key= para chaves de ordenação customizadas.

Como inverto uma lista em Python?

lista.reverse() inverte in place. lista[::-1] retorna uma nova lista invertida. reversed(lista) retorna um iterador sobre o qual você pode fazer laço. Escolha o que combina com sua necessidade: in place, cópia nova ou iteração preguiçosa.

Aprenda a programar com o Coddy

COMEÇAR