Come posso trovare la prima occorrenza di una sottostringa in una stringa Python?


123

Quindi se la mia stringa è "il tizio è un tipo figo".
Vorrei trovare il primo indice di "amico":

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

Qual è il comando Python per questo?
Grazie.

Risposte:


213

find()

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

20
Ritorna -1se non viene trovato
Christophe Roussy

e se volessi trovare la parola isdalla frase this is a cool dude? Ho provato il metodo find ma restituisce l'indice 2 invece di 5. Come posso ottenerlo usando find ()?
Regressor

@Regressor: esamina le espressioni regolari e i confini delle parole.
Mechanical_meat

28

Panoramica rapida: indexefind

Accanto al findmetodo c'è anche index. finded indexentrambi danno lo stesso risultato: restituendo la posizione della prima occorrenza, ma se non viene trovato nulla indexsolleverà a ValueErrormentre findritorna -1. Per quanto riguarda la velocità, entrambi hanno gli stessi risultati di benchmark.

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

Conoscenza aggiuntiva: rfinde rindex:

In generale, find e index restituiscono l'indice più piccolo dove inizia la stringa passata e rfinde rindexrestituiscono l'indice più grande dove inizia La maggior parte degli algoritmi di ricerca di stringhe cerca da sinistra a destra , quindi le funzioni che iniziano con rindicano che la ricerca avviene da destra a sinistra .

Quindi, nel caso in cui la probabilità dell'elemento che stai cercando sia vicina alla fine rispetto all'inizio dell'elenco, rfindo rindexsarebbe più veloce.

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

Fonte: Python: Guida rapida visiva, Toby Donaldson


se la stringa è definita come input_string = "this is a sentence"e se vogliamo trovare la prima occorrenza della parola is, allora funzionerà? # 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")
Regressor

1

per implementarlo in modo algoritmico, non utilizzando alcuna funzione incorporata in Python. Questo può essere implementato come

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

0
def find_pos(chaine,x):

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

6
Sembra che il tuo rientro sia disattivato e ti sei dimenticato di chiudere le virgolette. Anche la spiegazione del codice e il motivo per cui risolverebbe il problema sono utili; vedi Come rispondere
camille

scusa se lo modifico ... il mio codice trova la prima occorrenza di una lettera in stringa e restituisce il suo posto
Benmadani Yazid

0

verse = "Se riesci a mantenere la testa quando tutti intorno a te \ n stanno perdendo la loro e ti danno la colpa, \ nSe puoi fidarti di te stesso quando tutti gli uomini dubitano di te, \ n ma considera anche i loro dubbi; \ nSe puoi aspetta e non stancarti di aspettare, \ n o di essere mentito, non trattare con bugie, \ nO di essere odiato, non cedere all'odio, \ n Eppure non sembrare troppo buono, né parlare troppo saggio :"

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))

Benvenuto in Stack Overflow. Stai rispondendo a una domanda vecchia e già risolta (risposta con il segno di spunta verde) senza fornire ulteriori informazioni o una spiegazione migliore. Quindi fondamentalmente duplica solo la risposta accettata . Dai un'occhiata a Come scrivo una buona risposta? . (E per ulteriore riferimento, dai un'occhiata a Come gestire la cancellazione di risposte tardive palesemente duplicate ("navigazione") su domande popolari ).
Ivo Mori
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.