Jak mogę znaleźć pierwsze wystąpienie podłańcucha w ciągu znaków Pythona?

123

Więc jeśli mój napis brzmi „koleś to fajny koleś”.
Chciałbym znaleźć pierwszy indeks słowa „koleś”:

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

Jakie jest do tego polecenie Pythona?
Dzięki.

foreyez
źródło

Odpowiedzi:

213

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4
mięso_mechaniczne
źródło
20
Wraca, -1jeśli nie zostanie znaleziony
Christophe Roussy
co jeśli chcę znaleźć słowo isze zdania this is a cool dude? Próbowałem znaleźć metodę wyszukiwania, ale zwraca ona indeks 2 zamiast 5. Jak to osiągnąć za pomocą funkcji find ()?
Regressor
@Regressor: spójrz na granice wyrażeń regularnych i słów.
Mechanical_meat
28

Krótki przegląd: indexifind

Obok findmetody jest też index. findi indexoba dają ten sam wynik: zwrócenie pozycji pierwszego wystąpienia, ale jeśli nic nie zostanie znalezione index, podniesie a, ValueErrorpodczas gdy findzwraca -1. Szybko, oba mają te same wyniki testów porównawczych.

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

Dodatkowa wiedza: rfindi rindex:

W ogóle, znaleźć i indeks zwróci najmniejszy indeks gdzie przeszedł w rozruchów strunowych, a rfindi rindexpowrócić największy indeks, gdzie rozpoczyna Większość ciąg algorytmy wyszukujące wyszukiwania od lewej do prawej , więc funkcje zaczynające się rwskazywać, że poszukiwania się dzieje z prawej w lewo .

Czyli w przypadku, gdy prawdopodobieństwo szukanego elementu jest bliskie końca niż początku listy rfindlub rindexbyłoby szybsze.

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

Źródło: Python: Visual QuickStart Guide, Toby Donaldson

user1767754
źródło
jeśli ciąg jest zdefiniowany jako input_string = "this is a sentence"i jeśli chcemy znaleźć pierwsze wystąpienie słowa is, to czy zadziała? # 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

aby zaimplementować to w sposób algorytmiczny, nie używając żadnej wbudowanej funkcji Pythona. Można to zaimplementować jako

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
źródło
0
def find_pos(chaine,x):

    for i in range(len(chaine)):
        if chaine[i] ==x :
            return 'yes',i 
    return 'no'
Benmadani Yazid
źródło
6
Wygląda na to, że wcięcie jest wyłączone i zapomniałeś zamknąć cudzysłowy. Pomocne jest również wyjaśnienie kodu i powodów, dla których miałby on rozwiązać problem; zobacz Jak odpowiedzieć
camille
przepraszam,
edytuję
0

verse = "Jeśli potrafisz zachować głowę, gdy wszystko wokół ciebie \ n Tracisz ich i obwiniasz za siebie, \ nJeśli możesz sobie zaufać, gdy wszyscy w ciebie wątpią, \ n Ale uwzględnij też ich wątpliwości; \ nJeśli możesz czekać i nie męczyć się czekaniem, \ n Lub byciem okłamanym, nie zadawaj się kłamstwom \ nLub bycia nienawidzonym, nie poddawaj się nienawiści, \ n A jednak nie wyglądaj zbyt dobrze ani nie mów zbyt mądrze : "

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
źródło
Witamy w Stack Overflow. Odpowiadasz na stare pytanie, na które już odpowiedziałeś (odpowiedź z zielonym znacznikiem wyboru), nie podając więcej informacji ani lepszego wyjaśnienia. Więc po prostu powiela zaakceptowaną odpowiedź . Zajrzyj do artykułu Jak napisać dobrą odpowiedź? . (Aby uzyskać więcej informacji, zapoznaj się z artykułem Jak radzić sobie z porządkowaniem późnych, rażąco zduplikowanych odpowiedzi („surfowanie”) w popularnych pytaniach ).
Ivo Mori