Manipulação de Strings em Python

Um tipo de dados bastante usado no dia a dia são as strings, ou cadeias de caracteres (ou sequências de caracteres). O tipo de dados string, ou str como é chamado em Python, possui várias operações úteis associadas a ele. Essas operações tornam Python uma linguagem bastante propícia para manipulação de textos.

Os exemplos abaixo ilustram o tipo de dados string e as operações associadas a ele.

# Imprimindo uma string.
s = "Olá, mundo!"
print(s)

# Tipo de uma string.
type(s)

# Tamanho de uma string.
len(s)

# Concatenação
print("Meu Brasil " + "brasileiro")

# Substitui uma substring por alguma outra coisa.
s1 = s.replace("mundo", "meu abacate")

print(s1)

# A string s começa com "Olá"?
print(s.startswith("Olá"))

# A string s termina com "mundo"?
print(s.endswith("mundo"))

# Quantas ocorrências da palavra "abacate" a string s1 possui?
print(s1.count("abacate"))
Olá, mundo!
<class 'str'>
11
Meu Brasil brasileiro
Olá, meu abacate!
True
False
1

Strings em Python são muito flexíveis e nos permitem executar as mais diversas operações de maneira simples. Vejamos mais exemplos:

# Como "capitalizar" (transformar a primeira letra da primeira palavra em maiúscula).
s = "ordem e progresso"
print(s.capitalize())

# Como verificar se uma string só possui números.
'12345'.isdigit()
'12345abc'.isdigit()

# Como verificar se uma string é alfanumérica (só possui letras e números).
'12345abc'.isalnum()
Ordem e progresso
True
False
True

Substrings em Python (Slicing)

Além das operações vistas acima, podemos acessar caracteres específicos de uma string em Python usando a notação []. Neste esquema de acesso a caracteres de uma string, o primeiro caracter está no índice $0$, o segundo no índice $1$, e assim por diante, conforme ilustrado no exemplo abaixo.

s = "Olá, mundo!"
print(s[0])
print(s[2])
print(s[6])
'O'
'á'
'u'

No caso da string "Olá, mundo!", temos a seguinte associação entre índices e caracteres:

O l á ,   m u n d o !
0 1 2 3 4 5 6 7 8 9 10

Podemos também acessar os elementos em ordem reversa usando índices negativos. Neste esquema, o último caracter de uma string está no índice $-1$, o penúltimo no índice $-2$, e assim por diante, como mostrado no exemplo abaixo.

s = "Olá, mundo!"
print(s[-1])
print(s[-2])
print(s[-4])
'!'
'o'
'n'

Podemos também acessar fatias ou "slices" de uma string ou lista em Python. Esta notação é muito concisa e poderosa, então é importante que você a entenda bem.

Segundo essa notação, uma fatia de uma string, ou seja, uma substring, pode ser acessada se fornecermos os índices do começo e do final da fatia que desejamos analisar, como mostrado abaixo:

s[1:3]
'lá'

Note que, como mencionamos anteriormente, os índices de uma string começam do 0 e não do 1.

Além disso, perceba que o índice do final da fatia não é incluído nela. No exemplo acima, o [1:3] nos retornou dois caracteres e não três. Foram retornados o caracter no índice $1$ e o caracter no índice $2$, mas não o caracter no índice $3$.

Se omitirmos o índice de ínicio da fatia ou o de final (ou ambos), o ínicio e o final da string serão considerados, respectivamente. Veja os exemplos:

s = "Olá, mundo!"
print(s[:3])

print(s[5:])

# Retorna toda a string
print(s[:])
Olá
mundo!
Olá, mundo!

É possível ainda especificar um parâmetro que indica quantos caracteres devem ser processados de cada vez. Por exemplo, se quisermos imprimir somente os caracteres nos índices pares ou ímpares de uma string, podemos fazer assim:

s = "Olá, mundo!"
print(s[::2]) # Imprime os caracteres nos índices pares
print(s[1::2]) # Imprime os caracteres nos índices ímpares
Oá ud!
l,mno

Um outro exemplo útil do uso da técnica de slicing para manipulação de strings é inverter uma palavra ou frase usando somente operações de slicing:

frase = "Mundo mundo vasto mundo"
print(frase[::-1])
odnum otsav odnum odnuM

No exemplo acima, usamos um terceiro parâmetro do recurso de slicing para indicar que retornamos toda a frase (os ::) e logo em seguida dizemos que faremos isso de trás para frente (por meio do $-1$ no final). Mais especificamente, o $-1$ indica que estamos saltando um caracter de cada vez, começando de trás para frente (o que é feito por meio do sinal de menos).

Então, para resumir, a sintaxe de slicing de strings é a seguinte [início:fim:salto], onde:

  • início é o primeiro índice a ser considerado (o primeiro caracter da string é considerado caso este valor seja omitido);

  • fim - 1 é o último índice a ser considerado (o último caracter da string é considerado caso este valor seja omitido); e

  • salto indica quantos caracteres devem ser saltados em cada etapa (o valor $1$ é considerado por padrão, e um sinal de menos deve ser usado para percorrer a string em ordem reversa).

Formatação de strings em Python

Os exemplos abaixo mostram as várias opções de formatação de strings.

# A função print concatena strings com um espaço entre elas.
print("Admirável", "Mundo", "Novo")

# A função print converte números para strings.
print(1984, "George Orwell")

# As strings somadas com + são concatenadas sem espaços entre elas.
print("#" + "Programando" + "Em" + "Python")

# Forma mais avançada de formatação de strings
frase = 'Um triângulo de base igual a {0} e altura igual a {1} possui área igual a {2}.'.format(3, 4, 12)
print(frase)
Admirável Mundo Novo
1984 George Orwell
#ProgramandoEmPython
Um triângulo de base igual a 3 e altura igual a 4 possui área igual a 12.

As versões mais novas do Python introduziram um recurso chamado f-strings, que melhoram ainda mais a formatação de strings. Vejamos um exemplo:

# Formatação de strings com f-strings
linguagem = "Python"
f"Programando em {linguagem}"
print(frase)
Programando em Python

Resumo de Operações em Strings

A tabela abaixo mostra um resumo dos principais operadores para manipulação de strings em Python.

Tabela 1. Operações em strings
Operador Descrição Exemplo

+

concatena (soma) duas strings

'abra' + 'cadabra' retorna 'abracadabra'

*

repete (replica) uma string múltiplas vezes

'ha' * 3 retorna 'hahaha'

[i]

retorna o i-ésimo caracter da string

'Brasil'[0] retorna 'B'

[i:j]

retorna a substring que vai dos índices i até j - 1

'Brasil'[0:3] retorna 'Bra'

Nas próximas seções continuaremos a ver outros tipos de dados compostos em Python.

Playground

# Use este espaço para praticar o que você aprendeu nesta seção. # Basta digitar o código no espaço abaixo e clicar 'run'.