Tutorial Completo Python 🐍

Dominando
Coleções em Python

list, tuple, set e dict — do zero ao uso real, com métodos, slicing, comprehension e boas práticas.

4Tipos
12Módulos
3.xVersão Python
list tuple set dict slicing comprehension copy
📋
list
Ordenada
Mutável
Aceita duplicados
🔒
tuple
Ordenada
Imutável
Aceita duplicados
🔵
set
Sem ordem
Mutável
Sem duplicados
🗂️
dict
Ordenado (3.7+)
Mutável
Chave → Valor
01

📋 Listas — criação e acesso

list

Estrutura ordenada e mutável — a mais usada em Python.

criando listas
numeros  = [1, 2, 3, 4]
nomes    = ["Ana", "Igor", "Carlos"]
misturada = [1, "dois", 3.0, True]  # tipos mistos
vazia    = []
acessando elementos
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
modificando elemento
numeros[0] = 99     # substitui o primeiro elemento
print(numeros)       # [99, 20, 30, 40]
02

📋 Listas — métodos e slicing

list
MétodoO 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
métodos em ação
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

🔸 Fatiamento (slice)

sintaxe: lista[início:fim:passo]
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

🔸 Percorrendo

nomes = ["Ana", "Igor", "Carlos"]

for nome in nomes:
    print(nome)

# com índice
for i, nome in enumerate(nomes):
    print(i, nome)
03

✨ List Comprehension

list

Forma concisa e pythônica de criar listas com uma expressão.

sintaxe
# [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']
vs loop tradicional
# 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]
💡
Dict comprehension também existe: { k: v for k, v in items.items() }. E set comprehension: { x**2 for x in nums }.
04

🔒 Tuplas (tuple)

tuple

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

🔸 Desempacotamento

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]
💡
Quando usar tupla? Dados que não devem mudar (coordenadas, cores RGB, configurações), retorno de múltiplos valores em funções, e como chave de dicionário (listas não podem ser chaves).
05

🔵 Conjuntos (set)

set

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!

🔸 Métodos

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)!

🔸 Uso prático: remover duplicados

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().
06

🔵 Operações matemáticas com sets

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)
💡
Sets são muito mais rápidos que listas para verificar se um elemento existe (in). Para grandes volumes de dados, prefira sets para busca.
07

🗂️ Dicionários — criação e acesso

dict

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)
acessando valores
print(pessoa["nome"])              # Igor
print(pessoa.get("email"))          # None — sem erro
print(pessoa.get("email", "N/A"))  # N/A — valor padrão
modificando e adicionando
pessoa["idade"] = 26           # modifica
pessoa["email"] = "igor@email.com"  # adiciona nova chave
del pessoa["ativo"]             # remove chave
08

🗂️ Dicionários — métodos e iteração

dict
métodos principais
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

🔸 Percorrendo

# percorre chaves (padrão)
for chave in pessoa:
    print(chave)

# percorre chave + valor
for chave, valor in pessoa.items():
    print(f"{chave}: {valor}")

🔸 Dict Comprehension

nomes  = ["Ana", "Igor", "Carlos"]
tamanhos = {nome: len(nome) for nome in nomes}
# {'Ana': 3, 'Igor': 4, 'Carlos': 6}
09

⚙️ Operações úteis com coleções

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)]
10

📋 Copiando coleções

⚠️ cópia por referência — ARMADILHA COMUM
a = [1, 2, 3]
b = a              # b aponta pro MESMO objeto
b.append(4)
print(a)           # [1, 2, 3, 4] — a também mudou!
cópia rasa (shallow copy)
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
cópia profunda (deep copy) — para aninhadas
import copy

matriz = [[1, 2], [3, 4]]
copia  = copy.deepcopy(matriz)   # copia listas internas também
11

🗂️ Coleções aninhadas e mistas

Python permite combinar qualquer coleção dentro de outra.

matriz (lista de listas)
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
lista de dicionários (padrão de APIs)
usuarios = [
    {"nome": "Igor",   "idade": 25},
    {"nome": "Ana",    "idade": 20},
    {"nome": "Carlos", "idade": 30},
]

for u in usuarios:
    print(u["nome"], u["idade"])
dicionário com listas
escola = {
    "turma_a": ["Ana", "Igor"],
    "turma_b": ["Carlos", "Maria"],
}

escola["turma_a"].append("Pedro")
print(escola["turma_a"])  # ['Ana', 'Igor', 'Pedro']
12

🚀 Boas práticas + Erros comuns + Exemplo final

✔ Boas práticas:

❌ 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:

filtrando usuários maiores de 18
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)
🚀
Caminho recomendado: Listas (base de tudo) → Dicionários (APIs) → Sets (duplicados e busca) → Tuplas (conceito específico)