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

123

Entonces, si mi cadena es "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 de Python para esto?
Gracias.

foreyez
fuente

Respuestas:

213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4
carne_mecánica
fuente
20
Regresa -1si no se encuentra
Christophe Roussy
¿Qué pasa si quiero encontrar la palabra isde la oración this is a cool dude? Intenté el método find pero devuelve el índice 2 en lugar de 5. ¿Cómo puedo lograr esto usando find ()?
Regresor
@Regressor: mira los límites de expresiones regulares y palabras.
mechanical_meat
27

Descripción rápida: indexyfind

Al lado del findmétodo hay también index. findy indextanto producir el mismo resultado: devolver la posición de la primera aparición, pero si no se encuentra nada indexelevará un ValueErrormientras que findlos rendimientos -1. Speedwise, ambos tienen los mismos resultados de referencia.

s.find(t)    #returns: -1, or index where t starts in s
s.index(t)   #returns: Same as find, but raises ValueError if t is not in s

Conocimientos adicionales: rfindy rindex:

En general, encontrar y índice de rentabilidad del índice más pequeño donde el pasado-in comienza la secuencia, y rfindy rindexdevuelve el índice más grande donde empieza La mayor parte de la cadena de búsqueda algoritmos de búsqueda de izquierda a derecha , por lo que las funciones de arranque con rindican que la búsqueda sucede desde la derecha a la izquierda .

Entonces, en caso de que la probabilidad del elemento que está buscando esté cerca del final que del comienzo de la lista, rfindo rindexsea ​​más rápida.

s.rfind(t)   #returns: Same as find, but searched right to left
s.rindex(t)  #returns: Same as index, but searches right to left

Fuente: Python: Visual QuickStart Guide, Toby Donaldson

usuario1767754
fuente
si la cadena se define como input_string = "this is a sentence"y si deseamos encontrar la primera aparición de la palabra is, ¿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
1

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 = 'dude1'
print(find_pos(string,word))
# output 4
sahasrara62
fuente
0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'
Benmadani Yazid
fuente
66
Parece que su sangría está desactivada y olvidó cerrar sus comillas. También es útil la explicación de su código y por qué resolvería el problema; ver cómo responder
camille
lo siento, lo edito ... mi código encuentra la primera aparición de una letra en cadena y devuelve su lugar
Benmadani Yazid
0

verso = "Si puedes mantener la cabeza cuando todo acerca de ti \ n Estás perdiendo la suya y culpándote de ti, \ nSi puedes confiar en ti mismo cuando todos los hombres dudan de ti, \ n Pero ten en cuenta también sus dudas; \ nSi puedes esperar y no estar cansado de esperar, \ n O ser mentido, no lidiar con mentiras, \ nO ser odiado, no dar paso al odio, \ n Y sin embargo, no te veas demasiado bien, ni hables demasiado sabio : "

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))
Abideen Muhammed
fuente
Bienvenido a Stack Overflow. Está respondiendo una pregunta antigua y ya respondida (responda 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 mayor referencia, eche un vistazo a Cómo manejar la limpieza de respuestas duplicadas descaradamente tardías ('navegar') en preguntas populares ).
Ivo Mori