HOWTO · Python

Cómo encontrar un carácter en una cadena en Python

Aprende a encontrar el índice de un carácter en una cadena de Python y a obtener la primera, la última o todas sus coincidencias.

En esta página

Los índices de las cadenas en Python empiezan en 0. Para buscar un carácter o una subcadena, usa find() para obtener la primera coincidencia, rfind() para obtener la última o index() cuando quieras que una búsqueda sin coincidencias genere ValueError. Si no encuentran nada, find() y rfind() devuelven -1. Para obtener todos los índices coincidentes, recorre la cadena con enumerate(). Los ejemplos de código siguientes se ejecutaron en el entorno de Python proporcionado; en cada sección se describen los resultados observados.

Estos métodos buscan en cadenas y distinguen entre mayúsculas y minúsculas. Cada uno recibe el valor que se quiere buscar y acepta los límites opcionales start y end: start se incluye y end se excluye. Por ejemplo, s.find("n", 6, 13) busca únicamente en el segmento que va del índice 6 al índice 12. El resultado es un índice contado desde el principio de la cadena original, no una posición relativa al segmento buscado.

Usar el método find() para encontrar la primera coincidencia y gestionar los casos sin coincidencia

Llama a find() sobre la cadena y pásale el carácter o la subcadena que quieras localizar. Devuelve el índice de la primera coincidencia, de izquierda a derecha. Si el valor no aparece, devuelve -1; comprueba ese resultado antes de usarlo como índice.

Para s = "python is fun" y c = "n", s.find(c) devuelve 5: la primera n está en el índice 5, contando desde cero. La forma general del método es string.find(substring, start, end); omite los límites opcionales para buscar en toda la cadena.

Este es un ejemplo completo para encontrar la primera coincidencia:

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

El ejemplo busca desde el principio de s. El resultado impreso es 5. Si la búsqueda puede no encontrar ninguna coincidencia, puedes guardar el resultado en position = s.find(c) y comprobarlo con if position != -1: para gestionar explícitamente ese caso.

Usar el método rfind() para encontrar la última coincidencia

Usa rfind() cuando necesites la última aparición de un carácter o una subcadena. Busca desde la derecha y devuelve el índice coincidente más alto, aunque el índice sigue contándose desde la izquierda. Al igual que find(), acepta los límites opcionales start y end, y devuelve -1 si no hay ninguna coincidencia.

Para la misma cadena y el mismo carácter, s.rfind(c) devuelve 12, el índice de la última n de "python is fun". La forma general es string.rfind(substring, start, end).

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

En este caso, el resultado es 12. Elige find() si te interesa la primera coincidencia y rfind() si necesitas la última; ninguno de los dos métodos genera un error solo porque el valor buscado no aparezca.

Usar el método index() cuando la ausencia de coincidencias debe generar un error

index() también devuelve el índice de la primera coincidencia y acepta los mismos límites opcionales start y end. La diferencia clave con find() está en el caso sin coincidencias: si el carácter o la subcadena no aparece, index() genera ValueError en vez de devolver -1. Úsalo cuando la ausencia deba tratarse como un error; usa find() si quieres comprobarla mediante el valor devuelto.

Con s = "python is fun" y c = "n", s.index(c) devuelve 5. La forma general es string.index(substring, start, end).

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

Este ejemplo busca la primera n, por lo que el resultado es 5. No describas el caso sin coincidencias diciendo que index() devuelve ValueError: el método genera esa excepción, que se puede gestionar con una instrucción try/except cuando corresponda.

Usar un bucle for con enumerate() para encontrar todos los índices coincidentes

find(), rfind() e index() devuelven un solo índice coincidente cada uno. Para encontrar todas las apariciones, recorre la cadena con enumerate(), que empareja cada carácter con su índice empezando en cero. Añade el índice cada vez que el carácter coincida con el valor que buscas.

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

En esta cadena, los índices coincidentes son [5, 12]: las dos letras n aparecen en los índices 5 y 12. Se puede expresar el mismo resultado con la comprensión de listas [pos for pos, char in enumerate(s) if char == c]. Así, la iteración y la condición de coincidencia quedan juntas cuando no hace falta un cuerpo de bucle aparte.

Ambas opciones recorren los caracteres en orden y usan los mismos índices que empiezan en cero. Elige el bucle si quieres realizar más operaciones para cada coincidencia; elige la comprensión de listas si solo necesitas recopilar los índices coincidentes.