HOWTO · Python

Como encontrar a posição de um caractere em uma string no Python

Aprenda a localizar a primeira, a última ou todas as ocorrências de um caractere em uma string no Python e a lidar com buscas sem correspondência.

Nesta página

Os índices de strings no Python começam em 0. Para localizar um caractere ou uma substring, use find() para obter a primeira ocorrência, rfind() para a última ou index() quando a ausência de uma correspondência deve gerar ValueError. Se não houver correspondência, find() e rfind() retornam -1. Para obter os índices de todas as ocorrências, percorra a string com enumerate().
Os exemplos de código abaixo foram executados no ambiente Python fornecido, e os resultados observados são apresentados em cada seção.

Esses métodos fazem buscas em strings e diferenciam maiúsculas de minúsculas. Cada um recebe o valor a ser buscado e aceita os limites opcionais start e end: start é incluído, e end é excluído. Por exemplo, s.find("n", 6, 13) pesquisa apenas o trecho que vai do índice 6 ao índice 12. O resultado continua sendo um índice contado desde o início da string original, e não uma posição relativa ao trecho pesquisado.

Usar o método find() para encontrar a primeira ocorrência e tratar a ausência

Chame find() na string e passe o caractere ou a substring que deseja localizar. O método retorna o índice da primeira ocorrência, da esquerda para a direita. Se o valor não estiver presente, retorna -1; portanto, verifique esse resultado antes de usá-lo como índice.

Para s = "python is fun" e c = "n", s.find(c) retorna 5: o primeiro n está no índice 5, contado a partir de zero. A forma geral do método é string.find(substring, start, end); omita os limites opcionais para pesquisar a string inteira.

Veja um exemplo completo para encontrar a primeira ocorrência:

s = "python is fun"
c = "n"
print(s.find(c))

O exemplo pesquisa a partir do início de s e imprime 5. Se a busca puder não encontrar o valor, atribua o resultado, por exemplo, a position = s.find(c) e verifique if position != -1: para tratar a ausência explicitamente.

Usar o método rfind() para encontrar a última ocorrência

Use rfind() quando precisar da ocorrência mais à direita de um caractere ou de uma substring. A busca começa pela direita, e o método retorna o maior índice correspondente; o índice, porém, continua sendo contado da esquerda para a direita. Assim como find(), rfind() aceita os limites opcionais start e end e retorna -1 quando não há correspondência.

Na mesma string e com o mesmo caractere, s.rfind(c) retorna 12, o índice do último n em "python is fun". A forma geral é string.rfind(substring, start, end).

s = "python is fun"
c = "n"
print(s.rfind(c))

O resultado é 12. Use find() quando a primeira ocorrência for relevante e rfind() quando for a última. Nenhum dos dois métodos gera um erro apenas porque o valor pesquisado não foi encontrado.

Usar o método index() quando a ausência deve gerar um erro

index() também retorna o índice da primeira ocorrência e aceita os mesmos limites opcionais start e end. A diferença principal em relação a find() aparece quando não há correspondência: index() gera ValueError em vez de retornar -1. Use-o quando a ausência deve ser tratada como erro; use find() quando preferir verificar a ausência pelo valor retornado.

Com s = "python is fun" e c = "n", s.index(c) retorna 5. A forma geral é string.index(substring, start, end).

s = "python is fun"
c = "n"
print(s.index(c))

Este exemplo procura o primeiro n, então o resultado é 5. Não descreva o caso sem correspondência como se index() retornasse ValueError: o método gera essa exceção, que pode ser tratada com uma instrução try/except, se necessário.

Usar um loop for com enumerate() para encontrar todos os índices correspondentes

Cada um dos métodos find(), rfind() e index() retorna um único índice correspondente. Para localizar todas as ocorrências, percorra a string com enumerate(), que associa cada caractere ao seu índice começando em zero. Acrescente o índice à lista sempre que o caractere corresponder ao valor pesquisado.

s = "python is fun"
c = "n"
lst = []
for pos, char in enumerate(s):
    if char == c:
        lst.append(pos)
print(lst)

Nesta string, os índices correspondentes são [5, 12]: os dois caracteres n estão nos índices 5 e 12. É possível obter o mesmo resultado com a compreensão de lista [pos for pos, char in enumerate(s) if char == c]. Essa forma mantém a iteração e a condição de correspondência juntas quando não é necessário um bloco de instruções separado para cada resultado.

As duas abordagens percorrem os caracteres na ordem e usam os mesmos índices começando em zero. Escolha o loop quando quiser fazer outras operações para cada correspondência; use a compreensão de lista quando a tarefa se limitar a reunir os índices encontrados.