W3docs

Fatiamento de Strings

Aprenda o fatiamento de strings em Python com sintaxe, diagramas de índices, valores de passo, índices negativos e exemplos práticos.

Fatiamento de Strings em Python

O fatiamento de strings permite extrair uma substring de uma string maior, especificando onde começar, onde parar e quantos caracteres pular de cada vez. É uma das operações de string mais comuns em Python e é usada em todo lugar, desde a análise de nomes de arquivos até a inversão de palavras.

Este capítulo aborda:

  • A sintaxe [start:stop:step] e como os índices mapeiam para os caracteres
  • Omitir start ou stop (fatiar desde o início ou até o final)
  • Índices negativos (contando da direita)
  • O parâmetro step (pular caracteres, inverter uma string)
  • Armadilhas comuns: índices fora do intervalo, fatias vazias
  • Exemplos práticos que você pode executar imediatamente

Se você é novo em strings em Python, leia o capítulo Python Strings primeiro — ele explica como as strings são criadas e indexadas.

Como Funcionam os Índices de String

Cada caractere em uma string Python tem dois índices: um positivo (contando da esquerda, começando em 0) e um negativo (contando da direita, começando em -1).

Para a string "Hello, World!":

 H   e   l   l   o   ,       W   o   r   l   d   !
 0   1   2   3   4   5   6   7   8   9  10  11  12   ← positive
-13 -12 -11 -10  -9  -8  -7  -6  -5  -4  -3  -2  -1  ← negative

A sintaxe completa de fatiamento é:

string[start:stop:step]
  • start — índice do primeiro caractere a incluir (padrão: 0)
  • stop — índice do primeiro caractere a excluir (padrão: fim da string)
  • step — quantas posições avançar a cada vez (padrão: 1)

O índice stop é exclusivo — o caractere em stop nunca é incluído no resultado.

Fatiamento Básico de Strings

Forneça um índice de início e de parada separados por dois-pontos para extrair os caracteres entre eles.

python— editable, runs on the server

my_string[0:3] retorna os caracteres nas posições 0, 1 e 2 — o caractere no índice 3 ('l') não é incluído.

Omitindo o Início ou o Final

Omita start para começar do primeiro caractere, ou omita stop para continuar até o último caractere.

python— editable, runs on the server

my_string[:] é um idioma comum para copiar uma string (embora as strings sejam imutáveis em Python, por isso simplesmente retorna o mesmo valor).

Índices Negativos

Índices negativos contam de trás para frente a partir do final da string. -1 refere-se ao último caractere, -2 ao penúltimo, e assim por diante.

python— editable, runs on the server

Um padrão útil: my_string[-n:] sempre fornece os últimos n caracteres, independentemente do tamanho da string.

O Parâmetro Step

O terceiro argumento do fatiamento é o passo. Ele controla quantas posições Python avança após cada caractere selecionado.

python— editable, runs on the server

Invertendo uma String

Defina o passo como -1 para iterar da direita para a esquerda. Esta é a forma idiomática de inverter uma string em Python:

python— editable, runs on the server

Você pode combinar um passo negativo com índices de início e parada. Lembre-se: quando o passo é negativo, start deve ser maior que stop.

my_string = "Hello, World!"
print(my_string[10:2:-1])  # 'lroW ,ol' — from index 10 down to (not including) index 2

Veja o capítulo Reverse a String para mais técnicas, incluindo reversed() e ''.join().

Combinando Start, Stop e Step

Todas as três partes funcionam juntas. Pense no fatiamento como um loop for que começa em start, para antes de stop e incrementa por step.

python— editable, runs on the server
python— editable, runs on the server

Índices Fora do Intervalo

Ao contrário do acesso direto por índice (que gera um IndexError para um índice fora do intervalo), o fatiamento lida com valores fora do intervalo de forma elegante, limitando-os às fronteiras da string.

my_string = "Hello, World!"

# Stop index beyond the string length — no error
print(my_string[7:100])  # 'World!'

# Start index beyond the string length — returns empty string
print(my_string[50:60])  # ''

# Direct index access would raise IndexError:
# print(my_string[100])  # IndexError: string index out of range

Isso torna o fatiamento seguro para padrões do tipo "me dê até N caracteres" sem precisar verificar len() primeiro.

Exemplos Práticos

Extrair a extensão de um arquivo

filename = "report.pdf"
extension = filename[-3:]
print(extension)  # 'pdf'

Extrair o domínio de um endereço de e-mail

email = "[email protected]"
at_index = email.index("@")
domain = email[at_index + 1:]
print(domain)  # 'example.com'

Truncar uma string longa com reticências

def truncate(text, max_length):
    if len(text) <= max_length:
        return text
    return text[:max_length - 3] + "..."

print(truncate("Hello, World!", 8))   # 'Hello...'
print(truncate("Hi", 8))             # 'Hi'

Verificar se uma string é um palíndromo

word = "racecar"
is_palindrome = word == word[::-1]
print(is_palindrome)  # True

Referência Rápida

ExpressãoSignificado
s[a:b]Caracteres do índice a até (não incluindo) b
s[:b]Do início até (não incluindo) b
s[a:]Do índice a até o final
s[:]Cópia completa
s[a:b:n]Cada n-ésimo caractere de a até b
s[::-1]String invertida
s[-n:]Últimos n caracteres
s[:-n]Tudo exceto os últimos n caracteres

O Que Ler a Seguir

Prática

Prática
What does the slice `s[2:5]` return for the string `'Python'`?
What does the slice `s[2:5]` return for the string `'Python'`?
Was this page helpful?