Submódulo 3: Listas, tuplas e dicionários: estruturas de dados simples

Site: Lumina
Curso: Python para Iniciantes: Lógica e Programação
Livro: Submódulo 3: Listas, tuplas e dicionários: estruturas de dados simples
Impresso por: Usuário visitante
Data: quarta-feira, 17 set. 2025, 21:06

Descrição

Neste submódulo exploramos as coleções básicas do Python — listas, tuplas e dicionários. Vamos entender quando usar cada uma, como criá-las, acessar seus elementos, operações comuns (fatiamento, métodos de lista, acesso por chave) e como escrever compreensões para produzir coleções de forma concisa. Inclui exemplos executáveis, testes rápidos e exercícios práticos para fixação.

Conceito e escolha entre listas, tuplas e dicionários

🎯 Por que conhecer as coleções básicas?

Antes de programar, vamos construir um modelo mental. Imagine seus dados como objetos em um armário:

Data structure
A data structure known as a hash table.
  • Lista é como uma prateleira onde você pode adicionar, remover ou reorganizar caixas (ordenada e mutável).
  • Tupla é como uma caixa lacrada com itens fixos — você não muda o conteúdo depois de selar (ordenada e imutável).
  • Dicionário é como uma etiqueta que aponta para um conteúdo — você consulta pelo rótulo (chave) e obtém o valor rapidamente (mapeamento chave→valor).

Por que isso importa? Porque a escolha afeta legibilidade, segurança (imutabilidade) e desempenho. Vamos ver por que e como usar cada uma na prática (referências oficiais e guias práticos abaixo) (1)(2).

Lembra que vimos...

Nos submódulos anteriores vimos tipos primitivos e operações básicas. Agora aplicamos esses tipos para organizar coleções: sequências (listas/tuplas) e mapeamentos (dicionários). Isso prepara você para funções e controle de fluxo adiante.

Reflita: Pense em um exemplo de dados do seu dia a dia (ex.: lista de tarefas, contato com nome/telefone). Qual estrutura descreve melhor esse dado? Por quê?

Exemplos rápidos — o que cria cada estrutura?

# Lista: mutável, ordenada
lista = [1, 2, 3]
# Tupla: imutável, ordenada
tupla = ("a", "b", "c")
# Dicionário: pares chave:valor
pessoa = {"nome": "Ana", "idade": 25}

# Acesso
primeiro = lista[0]        # 1
nome = pessoa["nome"]     # 'Ana'
# Note: acessar chave inexistente causa KeyError

Se você precisar de consulta por rótulo (como um catálogo), prefira dicionários. Se os elementos nunca devem mudar, use tupla. Para coleções mutáveis e frequentemente modificadas, use lista. A documentação oficial descreve detalhes sobre sequências e mapeamentos (1). Recursos didáticos mostram quando e como usar compreensões para criar coleções de forma concisa (2).

Atividade rápida — escolha uma estrutura:
  1. Liste 3 exemplos de dados do seu cotidiano (ex.: compras, contatos, logs).
  2. Para cada item, escreva qual estrutura usaria (lista/tupla/dicionário) e justifique em 1 frase.

Depois compare suas escolhas com a explicação da documentação (1).

Listas: operações, métodos e mutabilidade (fatiamento e bons hábitos)

🔧 Por que dominar operações de lista?

Listas são a estrutura de coleção mais usada em Python. Saber manipulá-las com segurança evita bugs e melhora performance. Vamos ver os métodos importantes, como fatiamento funciona e quais erros esperar. A documentação detalha a API de sequências e exemplos (1). Para transformar loops em formas mais concisas, compreensões e geradores são úteis (2).

Operações essenciais

  • append(x) — adiciona um item ao fim.
  • extend(iterable) — adiciona cada item do iterável.
  • insert(i, x) — insere na posição i.
  • remove(x) — remove a primeira ocorrência de x.
  • pop([i]) — remove e retorna o item (último por padrão).
  • clear() — remove todos os itens.

Fatiamento (slicing)

Fatiamento produz uma nova lista com os elementos selecionados: sub = lista[1:4:2]. Lembre que fatiamento cria cópia superficial, logo alterações em objetos mutáveis dentro dessa sublista afetam os itens originais.

Exemplo prático com testes

# Vamos construir e testar pequenas operações
nums = [10, 20, 30]
nums.append(40)            # [10, 20, 30, 40]
nums.insert(1, 15)         # [10, 15, 20, 30, 40]
last = nums.pop()          # last == 40
nums.remove(15)            # [10, 20, 30]
# slicing cria cópia
sub = nums[0:2]
assert sub == [10, 20]
# erro comum: nums[10] -> IndexError
Atividade prática: Abra um REPL (ou um arquivo .py) e execute o trecho acima. Em seguida, experimente estes casos:
  1. Tentar remover um valor inexistente e observar o erro.
  2. Fazer fatiamento com passo negativo e explicar o resultado.

Dica: use try/except se quiser capturar erros e mostrar mensagens amigáveis.

Erros comuns e boas práticas

Um erro frequente é modificar uma lista enquanto itera sobre ela — isso causa comportamento inesperado. Se precisar remover itens durante iteração, iterar sobre uma cópia (for x in lista[:]) ou construir uma nova lista com compreensão é mais seguro (2).

Dicionários, compreensões e critérios para escolher a estrutura certa

📦 Dicionários: armazenamento por chave

Dicionários são coleções não ordenadas de pares chave: valor (em CPython a ordem de inserção é preservada para operações iterativas, mas o acesso é por chave) (1). Usamos dicionários quando precisamos buscar por rótulos ao invés de índices numéricos.

Associative array
This graph compares the average number of CPU cache misses required to look up elements in large hash tables (far exceeding size of the cache) with chaining and linear probing. Linear probing performs better due to better locality of reference, though as the table gets full, its performance degrades drastically.

Operações úteis

  • val = d[k] — acessa (KeyError se inexistente).
  • val = d.get(k, default) — acessa com valor padrão se chave ausente.
  • d.keys(), d.values(), d.items() — iteradores úteis para percorrer o conteúdo.
  • del d[k] ou d.pop(k) — remover pares.

Compreensões

Assim como listas, podemos criar dicionários de forma concisa com compreensões:

# Dicionário de quadrados
squares = {x: x*x for x in range(6)}
# Usando get para consulta segura
valor = squares.get(10, 'não encontrado')

Compreensões deixam o código mais curto e frequentemente mais claro — mas evite compreensões muito complexas: prefira legibilidade (2).

graph TD; A[Dados do problema] --> B{Precisa de acesso por índice?}; B -- Sim --> C[Listas ou tuplas]; B -- Não --> D{Acesso por rótulo?}; D -- Sim --> E[Dicionário]; D -- Não --> C; C --> F[Escolha: Tupla se imutável, Lista se modificar]
Atividade prática:
  1. Construa um dicionário de contatos: use o nome como chave e número como valor.
  2. Implemente uma função que retorna o número ou uma mensagem 'não encontrado' usando get.
  3. Crie um dict comprehension que transforme uma lista de nomes em um mapa para suas iniciais.

Documentação e guias práticos detalham os métodos, iteração e boas práticas para dicionários e compreensões (1)(3).

🎯 Exercícios

🎯 Exercícios: Listas, tuplas e dicionários: estruturas de dados simples

Teste seus conhecimentos com estas questões de múltipla escolha. Cada questão tem apenas uma resposta correta.

Questão 1

Qual afirmação descreve corretamente as listas em Python?

Questão 2

Qual característica define a tupla em Python?

Questão 3

Qual afirmação descreve uma prática segura para consultar valores em um dicionário?

Questão 4

Em slicing de listas, o que acontece com objetos mutáveis contidos?

Questão 5

Sobre compreensões de listas em Python, qual afirmação está correta?