Python: Strings e Containers Abrangente

Última atualização: 2026-09-22

Nas lições anteriores, cobrimos listas, tuplas, dicionários, conjuntos e métodos de string. Agora vamos combiná-los — usando as "combinações" mais comuns para resolver problemas reais. Estas técnicas são usadas diariamente na programação profissional.


Funções internas relacionadas:enumerate() sorted() split() join() str() zip() None

1. split() Trabalhando com Listas

split() quebra uma string em uma lista — o primeiro passo no processamento de dados:

PYTHON
# Análise de dados CSV
line = "Alice,25,São Paulo,Engenheira"
fields = line.split(",")
print(fields)               # ['Alice', '25', 'São Paulo', 'Engenheira']

# Dividir por espaços em branco (padrão)
text = "hello   world    python"
words = text.split()
print(words)                # ['hello', 'world', 'python']

# Limitar o número de divisões
data = "2026-06-23-15-30-00"
parts = data.split("-", 3)
print(parts)                # ['2026', '06', '23', '15-30-00']

▶ Exemplo: Analisando um Arquivo de Configuração (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
{'host': 'localhost', 'port': '8080', 'debug': 'true', 'theme': 'dark'}
Host atual: localhost
Porta atual: 8080


2. O Poder do join()

join() é o inverso de split() — mescla uma lista em uma string:

PYTHON
# Uso básico
words = ["Hello", "World", "Python"]
sentence = " ".join(words)
print(sentence)             # Hello World Python

# Juntar com vírgulas
csv = ",".join(["Alice", "25", "São Paulo"])
print(csv)                  # Alice,25,São Paulo

# Juntar com novas linhas
lines = "\n".join(["Primeira linha", "Segunda linha", "Terceira linha"])
print(lines)

(1) Vantagens de Desempenho do join()

TEXT 📖 Somente leitura
# ❌ Não recomendado — concatenação de strings em um laço
result = ""
for i in range(1000):
    result += str(i) + ","
# Isso cria 1000 objetos temporários de string (strings são imutáveis)

# ✅ Recomendado — colete em uma lista + join()
parts = [str(i) for i in range(1000)]
result = ",".join(parts)
# Uma mesclagem, muito mais eficiente

▶ Exemplo: Formatando uma Tabela (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
Nome | Idade | Cidade
─────────────────────────
Alice | 25 | São Paulo
Bob | 30 | Rio de Janeiro
Charlie | 22 | Belo Horizonte


3. sorted() com Strings e Dicionários

sorted() funciona em qualquer iterável, não apenas listas:

PYTHON
# Ordenar uma string — ordem alfabética
text = "python"
sorted_chars = sorted(text)
print(sorted_chars)                 # ['h', 'n', 'o', 'p', 't', 'y']
print("".join(sorted_chars))        # hnopty — recombinado

# Ordenar um dicionário — ordena chaves por padrão
d = {"banana": 3, "maçã": 5, "cereja": 2}
sorted_keys = sorted(d)
print(sorted_keys)                  # ['banana', 'cereja', 'maçã']

# Ordenar por value
sorted_by_value = sorted(d.items(), key=lambda x: x[1])
print(sorted_by_value)              # [('cereja', 2), ('banana', 3), ('maçã', 5)]

# Ordenar um conjunto
s = {3, 1, 4, 1, 5, 9}
sorted_set = sorted(s)
print(sorted_set)                   # [1, 3, 4, 5, 9]

▶ Exemplo: Regra de Ordenação Personalizada (Dificuldade ⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
# Function defined successfully


4. enumerate() e zip()

Estas duas funções embutidas são extremamente comuns no trabalho diário.

(1) enumerate() — Obter Índice Durante a Iteração

PYTHON
fruits = ["maçã", "banana", "laranja"]

# Sem enumerate — deselegante
for i in range(len(fruits)):
    print(f"{i + 1}. {fruits[i]}")

# Com enumerate — elegante
for i, fruit in enumerate(fruits, 1):    # start=1 para contagem a partir de 1
    print(f"{i}. {fruit}")

(2) zip() — Iteração Paralela sobre Múltiplas Listas

PYTHON
names = ["Alice", "Bob", "Charlie"]
scores = [85, 92, 78]
cities = ["São Paulo", "Rio de Janeiro", "Belo Horizonte"]

# Iterar sobre três listas simultaneamente
for name, score, city in zip(names, scores, cities):
    print(f"{name}: {score} pontos, de {city}")

Saída:

TEXT 📖 Somente leitura
Alice: 85 pontos, de São Paulo
Bob: 92 pontos, de Rio de Janeiro
Charlie: 78 pontos, de Belo Horizonte

▶ Exemplo: Boletim de Notas do Aluno (Dificuldade ⭐⭐⭐)

▶ Experimente

Saída:

TEXT 📖 Somente leitura
=== Boletim de Notas ===


5. Caso Abrangente de Processamento de Dados

Vamos aplicar tudo o que aprendemos a um cenário do mundo real:

(1) Caso: Análise de Log (Dificuldade ⭐⭐⭐)

PYTHON
# Log de servidor simulado
log_data = """
2026-06-20 10:23:45 INFO  Usuário 1001 fez login
2026-06-20 10:25:12 ERRO  Timeout de conexão com banco de dados
2026-06-20 10:26:30 INFO  Usuário 1002 fez login
2026-06-20 10:27:45 WARN  Uso de disco 85%
2026-06-20 10:28:10 ERRO  Usuário 1001 request timeout
2026-06-20 10:29:00 INFO  Usuário 1001 fez logout
"""

# 1. Dividir por linhas
lines = log_data.strip().split("\n")

# 2. Analisar cada entrada de log
parsed = []
for line in lines:
    parts = line.split()
    timestamp = f"{parts[0]} {parts[1]}"
    level = parts[2]
    message = " ".join(parts[3:])
    parsed.append({"time": timestamp, "level": level, "msg": message})

# 3. Contar por nível
level_count = {}
for entry in parsed:
    level = entry["level"]
    level_count[level] = level_count.get(level, 0) + 1

# 4. Exibir ordenado por nível
print("=== Estatísticas de Log ===")
for level, count in sorted(level_count.items()):
    print(f"{level}: {count} entradas")

# 5. Filtrar todos os ERROs
print("\n=== Detalhes de Erros ===")
errors = [e for e in parsed if e["level"] == "ERRO"]
for e in errors:
    print(f"[{e['time']}] {e['msg']}")

Saída:

TEXT 📖 Somente leitura
=== Estatísticas de Log ===
ERRO: 2 entradas
INFO: 3 entradas
WARN: 1 entrada

=== Detalhes de Erros ===
[2026-06-20 10:25:12] Timeout de conexão com banco de dados
[2026-06-20 10:28:10] Usuário 1001 request timeout


6. Casos de Uso Comuns


Funções internas relacionadas:enumerate() sorted() split() join() str() zip() None

❓ Perguntas Frequentes

P Qual a diferença entre split() e split(" ")?
R split() sem argumentos divide por qualquer espaço em branco (espaços, novas linhas, tabulações) e remove automaticamente strings vazias. split(" ") divide apenas por espaços simples; espaços consecutivos produzem strings vazias. Na maioria dos casos, split() sem argumentos é a melhor escolha.
P join() requer que todos os elementos da lista sejam strings?
R Sim. ",".join([1, 2, 3]) dará erro. Converta números para strings primeiro: ",".join(str(x) for x in [1, 2, 3]) ou use str() em uma list comprehension.
P O que acontece quando zip() processa listas de comprimentos diferentes?
R zip() para na lista mais curta. Se uma de três listas tem apenas 2 elementos, zip() produz apenas 2 pares. Para preencher com None até a lista mais longa, use itertools.zip_longest().

📖 Resumo



📝 Exercícios

  1. Básico (Dificuldade ⭐): Dado s = "maçã,banana,laranja,uva", use split() para quebrar em uma lista, depois use join() para exibir "maçã | banana | laranja | uva".

  2. Intermediário (Dificuldade ⭐⭐): Dadas duas listas students = ["Alice", "Bob", "Charlie"] e scores = [85, 92, 78], use zip() e enumerate() para exibir um relatório classificado:

    TEXT 📖 Somente leitura
    #1: Bob — 92 pontos
    #2: Alice — 85 pontos
    #3: Charlie — 78 pontos
    
  3. Desafio (Dificuldade ⭐⭐⭐): Escreva um "Gerador CSV Simples." Dada uma lista de listas data = [["Nome", "Idade", "Cidade"], ["Alice", 25, "São Paulo"], ["Bob", 30, "Rio de Janeiro"]], exiba como uma string CSV (linhas separadas por vírgula). Dica: Use str() em list comprehension para números, ",".join() para cada linha, "\n".join() para todas as linhas.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%