list, tuple, set e dict — do zero ao uso real, com métodos, slicing, comprehension e boas práticas.
Estrutura ordenada e mutável — a mais usada em Python.
numeros = [1, 2, 3, 4]
nomes = ["Ana", "Igor", "Carlos"]
misturada = [1, "dois", 3.0, True] # tipos mistos
vazia = []
numeros = [10, 20, 30, 40]
print(numeros[0]) # 10 — primeiro
print(numeros[2]) # 30 — terceiro
print(numeros[-1]) # 40 — último
print(numeros[-2]) # 30 — penúltimo
numeros[0] = 99 # substitui o primeiro elemento
print(numeros) # [99, 20, 30, 40]
| Método | O que faz |
|---|---|
| append(x) | Adiciona x no final |
| insert(i, x) | Insere x na posição i |
| remove(x) | Remove a primeira ocorrência de x |
| pop() | Remove e retorna o último elemento |
| pop(i) | Remove e retorna elemento da posição i |
| sort() | Ordena a lista in-place (crescente) |
| reverse() | Inverte a ordem in-place |
| index(x) | Retorna o índice de x |
| count(x) | Conta quantas vezes x aparece |
| clear() | Remove todos os elementos |
nums = [3, 1, 4, 1, 5]
nums.append(9) # [3, 1, 4, 1, 5, 9]
nums.insert(0, 0) # [0, 3, 1, 4, 1, 5, 9]
nums.remove(1) # remove o primeiro 1 → [0, 3, 4, 1, 5, 9]
nums.sort() # [0, 1, 3, 4, 5, 9]
print(nums.pop()) # retorna 9 e remove
nums = [0, 1, 2, 3, 4, 5]
print(nums[1:4]) # [1, 2, 3]
print(nums[:3]) # [0, 1, 2] — do início até 2
print(nums[3:]) # [3, 4, 5] — do 3 até o fim
print(nums[::-1]) # [5, 4, 3, 2, 1, 0] — invertida
print(nums[::2]) # [0, 2, 4] — passo 2
nomes = ["Ana", "Igor", "Carlos"]
for nome in nomes:
print(nome)
# com índice
for i, nome in enumerate(nomes):
print(i, nome)
Forma concisa e pythônica de criar listas com uma expressão.
# [expressão for item in iterável if condição]
pares = [x for x in range(10) if x % 2 == 0]
quadrados = [x**2 for x in range(5)]
maiusculas= [n.upper() for n in ["ana", "igor"]]
print(pares) # [0, 2, 4, 6, 8]
print(quadrados) # [0, 1, 4, 9, 16]
print(maiusculas) # ['ANA', 'IGOR']
# loop tradicional
pares = []
for x in range(10):
if x % 2 == 0:
pares.append(x)
# comprehension equivalente
pares = [x for x in range(10) if x % 2 == 0]
{ k: v for k, v in items.items() }. E set comprehension: { x**2 for x in nums }.Como listas, mas imutáveis — uma vez criadas, não podem ser alteradas.
coordenadas = (10, 20)
cores = ("vermelho", "verde", "azul")
unitaria = (42,) # tupla de 1 elemento — vírgula obrigatória
print(coordenadas[0]) # 10
print(coordenadas[-1]) # 20
coordenadas = (10, 20)
x, y = coordenadas # desempacota
print(x, y) # 10 20
# troca de variáveis elegante
a, b = 1, 2
a, b = b, a
print(a, b) # 2 1
# desempacotamento com *
primeiro, *resto = (1, 2, 3, 4)
print(primeiro, resto) # 1 [2, 3, 4]
Sem ordem, sem duplicados — ideal para testes de pertinência e operações matemáticas.
numeros = {1, 2, 3, 3, 2} # duplicados são removidos
print(numeros) # {1, 2, 3}
vazio = set() # ⚠️ {} cria dict, não set!
nums = {1, 2, 3}
nums.add(4) # {1, 2, 3, 4}
nums.remove(2) # {1, 3, 4} — erro se não existir
nums.discard(99) # sem erro se não existir
print(3 in nums) # True — O(1)!
lista = [1, 1, 2, 3, 2, 4]
sem_duplicados = list(set(lista))
print(sem_duplicados) # [1, 2, 3, 4] (ordem não garantida)
{} cria um dicionário vazio, não um set! Para criar um set vazio use set().a = {1, 2, 3}
b = {3, 4, 5}
print(a | b) # União: {1, 2, 3, 4, 5}
print(a & b) # Interseção: {3}
print(a - b) # Diferença: {1, 2}
print(a ^ b) # Diferença simétrica: {1, 2, 4, 5}
# ou usando métodos
a.union(b)
a.intersection(b)
a.difference(b)
in). Para grandes volumes de dados, prefira sets para busca.Estrutura de chave → valor, ordenada (Python 3.7+), mutável.
pessoa = {
"nome": "Igor",
"idade": 25,
"ativo": True
}
# forma alternativa
pessoa2 = dict(nome="Ana", idade=20)
print(pessoa["nome"]) # Igor
print(pessoa.get("email")) # None — sem erro
print(pessoa.get("email", "N/A")) # N/A — valor padrão
pessoa["idade"] = 26 # modifica
pessoa["email"] = "igor@email.com" # adiciona nova chave
del pessoa["ativo"] # remove chave
pessoa = {"nome": "Igor", "idade": 25}
print(pessoa.keys()) # dict_keys(['nome', 'idade'])
print(pessoa.values()) # dict_values(['Igor', 25])
print(pessoa.items()) # dict_items([('nome','Igor'),('idade',25)])
pessoa.update({"cidade": "SP"}) # adiciona/atualiza vários de uma vez
pessoa.pop("idade") # remove e retorna o valor
# percorre chaves (padrão)
for chave in pessoa:
print(chave)
# percorre chave + valor
for chave, valor in pessoa.items():
print(f"{chave}: {valor}")
nomes = ["Ana", "Igor", "Carlos"]
tamanhos = {nome: len(nome) for nome in nomes}
# {'Ana': 3, 'Igor': 4, 'Carlos': 6}
lista = [3, 1, 4, 1, 5, 9]
print(len(lista)) # 6 — tamanho
print(4 in lista) # True — pertinência
print(sorted(lista)) # [1, 1, 3, 4, 5, 9] — nova lista ordenada
print(sorted(lista, reverse=True)) # decrescente
print(sum(lista)) # 23
print(min(lista)) # 1
print(max(lista)) # 9
# zip — combina iteráveis
nomes = ["Ana", "Igor"]
idades = [20, 25]
juntos = list(zip(nomes, idades))
# [('Ana', 20), ('Igor', 25)]
a = [1, 2, 3]
b = a # b aponta pro MESMO objeto
b.append(4)
print(a) # [1, 2, 3, 4] — a também mudou!
b = a.copy() # cópia independente
b = a[:] # também funciona com slice
b = list(a) # ou via construtor
b.append(99)
print(a) # [1, 2, 3] — a não mudou
import copy
matriz = [[1, 2], [3, 4]]
copia = copy.deepcopy(matriz) # copia listas internas também
Python permite combinar qualquer coleção dentro de outra.
matriz = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
print(matriz[0][1]) # 2 — linha 0, coluna 1
print(matriz[2][2]) # 9 — linha 2, coluna 2
usuarios = [
{"nome": "Igor", "idade": 25},
{"nome": "Ana", "idade": 20},
{"nome": "Carlos", "idade": 30},
]
for u in usuarios:
print(u["nome"], u["idade"])
escola = {
"turma_a": ["Ana", "Igor"],
"turma_b": ["Carlos", "Maria"],
}
escola["turma_a"].append("Pedro")
print(escola["turma_a"]) # ['Ana', 'Igor', 'Pedro']
✔ Boas práticas:
list para sequências que mudamtuple para dados fixos e retorno de múltiplos valoresset para remover duplicados ou checar pertinência rápidadict para representar dados estruturados (como JSON).get() em dicts ao invés de acessar chave diretamente❌ Erros comuns:
# ❌ Acessar chave inexistente
pessoa["email"] # KeyError
# ✅ use .get()
pessoa.get("email") # None — sem erro
# ❌ Alterar tupla
t = (1, 2)
t[0] = 10 # TypeError: object does not support item assignment
# ❌ Confundir set com lista
{1, 2, 3} # is set, não lista
[1, 2, 3] # lista
# ❌ Cópia por referência
b = a # mesmo objeto — mudanças em b afetam a
# ✅
b = a.copy() # novo objeto
🎯 Exemplo prático completo:
usuarios = [
{"nome": "Igor", "idade": 25},
{"nome": "Ana", "idade": 17},
{"nome": "Carlos", "idade": 30},
]
# forma tradicional
maiores = []
for u in usuarios:
if u["idade"] >= 18:
maiores.append(u["nome"])
# forma pythônica
maiores = [u["nome"] for u in usuarios if u["idade"] >= 18]
print(maiores) # ['Igor', 'Carlos']
# stats com dict
stats = {
"total": len(usuarios),
"maiores": len(maiores),
"nomes": set(u["nome"] for u in usuarios)
}
print(stats)