¿Cómo puedo encontrar la primera aparición de una subcadena en una cadena de python?

4 minutos de lectura

avatar de usuario
Interfaz de usuario de Shai

Dada la cadena “el tipo es un tipo genial”,
Me gustaría encontrar el primer índice de ‘amigo’:

mystring.findfirstindex('dude') # should return 4

¿Cuál es el comando Python para esto?

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4

  • Vuelve -1 si no se encuentra

    – Christophe Roussy

    27 de abril de 2017 a las 12:49

  • y si quiero encontrar la palabra is de la oración this is a cool dude ? Probé el método de búsqueda pero devuelve el índice 2 en lugar de 5. ¿Cómo logro esto usando find() ?

    – Regresor

    12 abr 2020 a las 23:09

  • @Regressor: busque expresiones regulares y límites de palabras.

    – carne_mecánica

    12 abr 2020 a las 23:29

Vista rápida: index y find

Al lado de find método también hay index. find y index ambos arrojan el mismo resultado: devolver la posición de la primera aparición, pero si no se encuentra nada index levantará un ValueError mientras find devoluciones -1. Speedwise, ambos tienen los mismos resultados de referencia.

s.find
s.index

Conocimiento adicional: rfind y rindex:

En general, find e index devuelven el índice más pequeño donde comienza la cadena pasada, y rfind y rindex devuelve el índice más grande donde comienza La mayoría de los algoritmos de búsqueda de cadenas buscan desde de izquierda a derechapor lo que las funciones comienzan con r indicar que la búsqueda ocurre desde De derecha a izquierda.

Entonces, en caso de que la probabilidad del elemento que está buscando esté más cerca del final que del comienzo de la lista, rfind o rindex seria mas rapido

s.rfind
s.rindex

Fuente: Python: guía visual de inicio rápido, Toby Donaldson

  • si la cadena se define como input_string = "this is a sentence" y si deseamos encontrar la primera aparición de la palabra is entonces funcionará? # first occurence of word in a sentence input_string = "this is a sentence" # return the index of the word matching_word = "is" input_string.find("is")

    – Regresor

    12 de abril de 2020 a las 3:00


  • @Regressor es posible que desee buscar la cadena con espacios en cada extremo: 'this is a sentence'.find(' is ')

    – zfj3ub94rf576hc4eegm

    30 oct 2021 a las 21:32

avatar de usuario
sahasrara62

para implementar esto de manera algorítmica, al no usar ninguna función incorporada de python. Esto se puede implementar como

def find_pos(string,word):

    for i in range(len(string) - len(word)+1):
        if string[i:i+len(word)] == word:
            return i
    return 'Not Found'

string = "the dude is a cool dude"
word = 'dude'
print(find_pos(string,word))
# output 4

avatar de usuario
benmadani yazid

def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'

verse = “Si puedes mantener la cabeza cuando todos a tu alrededor\n están perdiendo la suya y te culpan a ti,\nsi puedes confiar en ti mismo cuando todos los hombres dudan de ti,\n pero ten en cuenta sus dudas también;\nsi puedes espera y no te canses de esperar,\n o de que te mientan, no trates con mentiras,\no de que te odien, no cedas al odio,\n y, sin embargo, no te veas demasiado bien, ni hables demasiado sabiamente :”

enter code here

print(verse)
#1. What is the length of the string variable verse?
verse_length = len(verse)
print("The length of verse is: {}".format(verse_length))
#2. What is the index of the first occurrence of the word 'and' in verse?
index = verse.find("and")
print("The index of the word 'and' in verse is {}".format(index))

  • Bienvenido a Stack Overflow. Está respondiendo una pregunta anterior y ya respondida (respuesta con la marca de verificación verde) sin dar más información o una mejor explicación. Entonces, básicamente, solo duplica la respuesta aceptada. Echa un vistazo a ¿Cómo escribo una buena respuesta?. (Y para obtener más referencias, eche un vistazo a Cómo manejar la limpieza de respuestas duplicadas descaradamente tardías (“navegar”) en preguntas populares).

    – Ivo Morí

    3 de agosto de 2020 a las 0:05

  • Bienvenido a Stack Overflow. Está respondiendo una pregunta anterior y ya respondida (respuesta con la marca de verificación verde) sin dar más información o una mejor explicación. Entonces, básicamente, solo duplica la respuesta aceptada. Echa un vistazo a ¿Cómo escribo una buena respuesta?. (Y para obtener más referencias, eche un vistazo a Cómo manejar la limpieza de respuestas duplicadas descaradamente tardías (“navegar”) en preguntas populares).

    – Ivo Morí

    3 de agosto de 2020 a las 0:05

¿Ha sido útil esta solución?