Noções Básicas de Estruturas de Dados
9 exemplos para você começar com os contêineres embutidos do Python - 6 básicos e 3 intermediários.
Pré-requisitos
- Python 3.14.0 e familiaridade com Noções Básicas de Python.
Exemplos Básicos
1. Lista - Sequência Mutável Ordenada
Adicione, indexe e fatie sequências.
items = ["a", "b", "c"]
items.append("d")
first = items[0]
middle = items[1:3]- O(1) para adicionar ao final; O(n) para inserir no início.
- Listas são heterogêneas - todos os tipos de objetos são permitidos.
- Fatiamento retorna uma nova lista (cópia rasa de referências).
Relacionado: Listas e Tuplas - ordenação e bisect
2. Tupla - Sequência Imutável Fixa
Agrupe valores relacionados que não devem mudar.
point = (10, 20)
x, y = point
record = ("ada", 1842)- Tuplas são hashable quando todos os elementos são hashable.
- Tupla de elemento único precisa de vírgula final:
(42,). - Desempacotamento funciona em atribuições e loops
for.
Relacionado: Imutabilidade e Hashability - quando tuplas são chaves de dicionário
3. dict - Mapeamento Chave-Valor
Pesquisa rápida por chave hashable.
user = {"id": 1, "name": "Ada"}
user["email"] = "ada@example.com"
for key, value in user.items():
print(key, value)- Média de O(1) para obter/definir/excluir por chave.
- Ordem de inserção preservada (garantia de linguagem desde 3.7).
- Chaves devem ser hashable - não listas mutáveis como chaves.
Relacionado: Dicionários - mesclagem e visualizações
4. set - Coleção Única Não Ordenada
Pertinência e álgebra de conjuntos.
tags = {"python", "data", "python"}
tags.add("ml")
assert "data" in tags
common = {"a", "b"} & {"b", "c"} # {"b"}- Literais usam
{}apenas para dicionários - conjuntos precisam deset()ou{"x"}com valores. - Média de O(1) para testes
in- ótimo para verificações de deduplicação. - União/interseção/diferença via operadores
|,&,-.
Relacionado: Conjuntos e Frozensets - frozenset como chave de dicionário
5. Tabela Resumo Big-O
| Operação | list | dict | set |
|---|---|---|---|
| Índice i | O(1) | - | - |
| Pertinência | O(n) | O(1)* | O(1)* |
| Adicionar | O(1)* | - | - |
| Inserir no meio | O(n) | - | - |
*Caso médio; colisões de hash no pior caso degradam dict/set.
- Escolha
set/dictquando precisar de pertinência rápida. - Escolha
listquando ordem e duplicatas importam com acesso por índice. - Perfilar caminhos críticos - constantes importam para n pequeno.
Relacionado: Escolhendo a Estrutura de Dados Certa - guia de decisão
6. collections.deque para Filas
Adição/remoção rápida de ambas as extremidades.
from collections import deque
queue: deque[str] = deque()
queue.append("job-1")
queue.append("job-2")
next_job = queue.popleft()list.pop(0)é O(n);deque.popleft()é O(1).maxlenopcional descarta os itens mais antigos automaticamente.- Não é uma fila de prioridade - use
heapqpara ordenação por prioridade.
Relacionado: Módulo collections - Counter e defaultdict
Exemplos Intermediários
7. defaultdict para Agrupamento
Evite verificações manuais de existência de chave ao construir grupos.
from collections import defaultdict
by_role: defaultdict[str, list[str]] = defaultdict(list)
for name, role in [("Ada", "admin"), ("Linus", "dev"), ("Guido", "dev")]:
by_role[role].append(name)- Fábrica executa apenas em chaves ausentes.
- Ainda é um dicionário - mesmos padrões de iteração e serialização.
- Prefira sobre
setdefaultquando o padrão for um mutável novo.
Relacionado: Módulo collections - API completa
8. Counter para Frequências
Conte itens hashable em uma única passagem.
from collections import Counter
words = ["a", "b", "a", "c", "a", "b"]
counts = Counter(words)
print(counts.most_common(2)) # [('a', 3), ('b', 2)]- Subtraia contadores para diferenças de multiconjuntos.
elements()expande contagens de volta para itens repetidos.- Ótimo para análise de logs e esboços de histogramas.
9. Named Tuple para Registros Leves
Acesso a campos legível sem uma classe completa.
from typing import NamedTuple
class Point(NamedTuple):
x: int
y: int
p = Point(3, 4)
print(p.x, p.y)- Imutável - seguro como chaves de dicionário quando os campos são hashable.
dataclassé frequentemente melhor quando você precisa de padrões ou métodos.TypedDictse encaixa em dicionários em formato JSON que permanecem dicionários em tempo de execução.
Relacionado: TypedDict e NamedTuple - tipando registros
Versões de Stack: Esta página foi escrita para Python 3.14.0 (estável 3.14, manutenção 3.13), FastAPI 0.115+, Django 5.2, Flask 3.1, Pydantic 2, PyTorch 2.6+, pandas 2.2+, Polars 1.x, ruff 0.9+ e uv 0.6+.