Vamos a ver cómo obtener el índice numérico de un carácter o letra en una cadena de Python 3. No importa si lo que buscamos es un simple carácter o una subcadena, ambas formas serán cubiertas.
Los métodos de las cadenas que tiene Python para resolver este problema son dos: find
e index
. Vamos a explicar cómo se usa cada uno de ellos con ejemplos.
Lo que haremos
Obtener un índice numérico (comenzando con cero) que indique, a partir de una cadena, en dónde tiene la primer ocurrencia de una subcadena o carácter.
Usar find para buscar el índice de una subcadena o carácter en una cadena
Para esto, las cadenas tienen el método find
. Este método recibe otra cadena, la cual puede ser de cualquier tamaño. Devuelve -1 si no la encuentra, y un número mayor o igual a 0 en caso de que sí la encuentre.
Veamos un ejemplo:
"""
Posición o índice de subcadena en cadena con Python 3
usando index y find
@author parzibyte
"""
cadena = "Hola, mundo. Tengo un poco de texto sin sentido que servirá para explicar cómo buscar cadenas dentro de cadenas"
subcadena = "mundo"
indice = cadena.find(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# La subcadena 'mundo' está en el índice 6
subcadena = ","
indice = cadena.find(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# La subcadena ',' está en el índice 4
# Ahora buscamos la palabra "cadenas" que aparece dos veces, para ejemplificar el segundo argumento
subcadena = "cadena"
primer_indice = cadena.find(subcadena)
print("La primera ocurrencia está en {}".format(primer_indice))
# La primera ocurrencia está en 86
#Nota: es desde el índice + 1
segundo_indice = cadena.find(subcadena, primer_indice + 1)
print("La segunda, buscando a partir de {} está en {}".format(
primer_indice + 1, segundo_indice))
# La segunda, buscando a partir de 87 está en 104
# Ahora limitamos la búsqueda, aunque existe una coma, no la encontrará porque estamos limitando
subcadena = ","
indice = cadena.find(subcadena, 0, 1) # Hasta el primer carácter
if indice is not -1:
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
else:
print("Subcadena no encontrada")
# Subcadena no encontrada
# Finalmente buscamos algo que no existe y devuelve - 1
subcadena = "ASDFG"
indice = cadena.find(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# La subcadena 'ASDFG' está en el índice -1
Por cierto, esto devuelve la primer ocurrencia. Si queremos que comience a buscar desde determinado índice, podemos usar el segundo argumento, el cual es un número.
Igualmente, si queremos que busque hasta determinado índice, podemos especificar el segundo argumento para que no busque más allá.
Con index
Las cadenas en Python también tienen el método index
, el cual es idéntico a find
excepto por una cosa: si no se encuentra una subcadena, se lanza una excepción en lugar de devolver -1. Veamos el ejemplo:
"""
Posición o índice de subcadena en cadena con Python 3
usando index y find
@author parzibyte
"""
cadena = "Hola, mundo. Tengo un poco de texto sin sentido que servirá para explicar cómo buscar cadenas dentro de cadenas"
subcadena = "mundo"
indice = cadena.index(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# La subcadena 'mundo' está en el índice 6
subcadena = ","
indice = cadena.index(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# La subcadena ',' está en el índice 4
# Ahora buscamos la palabra "cadenas" que aparece dos veces, para ejemplificar el segundo argumento
subcadena = "cadena"
primer_indice = cadena.index(subcadena)
print("La primera ocurrencia está en {}".format(primer_indice))
# La primera ocurrencia está en 86
#Nota: es desde el índice + 1
segundo_indice = cadena.index(subcadena, primer_indice + 1)
print("La segunda, buscando a partir de {} está en {}".format(
primer_indice + 1, segundo_indice))
# La segunda, buscando a partir de 87 está en 104
# Ahora limitamos la búsqueda, aunque existe una coma, no la encontrará porque estamos limitando
subcadena = ","
try:
indice = cadena.index(subcadena, 0, 1) # Hasta el primer carácter
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
except:
print("Subcadena no encontrada")
# Subcadena no encontrada
# Finalmente buscamos algo que no existe y lanza un error
subcadena = "ASDFG"
indice = cadena.index(subcadena)
print("La subcadena '{}' está en el índice {}".format(subcadena, indice))
# ValueError: substring not found
Como se ve, es lo mismo que lo que hicimos con find
, pero ahora con la función index
en Python. Para cachar la excepción usamos un bloque try except
.
Apuntes
Con estos métodos podemos buscar el índice de la primera ocurrencia, luego el de la segunda ocurrencia (usando el segundo argumento para comenzar a buscar desde determinado lugar) y así sucesivamente. Esto sirve para muchas cosas en la práctica.
Por cierto, aquí puedes ver cómo recorrer cadenas carácter por carácter en Python.
Descargar ejemplos
Eres libre de copiar los ejemplos. Primero cópialos y guárdalos en un archivo con extensión py
. Más tarde, con la terminal navega hasta ellos y ejecuta python nombre_de_archivo.py
. Para tener a Python en la PATH mira este tutorial.
Pingback: Pangrama en Python - Parzibyte's blog