Как я могу найти первое вхождение подстроки в строке Python? - PullRequest
96 голосов
/ 11 июля 2010

Так что, если моя строка «чувак - крутой чувак».
Я бы хотел найти первый индекс «чувак»:

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

Что такое команда python для этого?
Спасибо.

Ответы [ 3 ]

169 голосов
/ 11 июля 2010

find()

>>> s = "the dude is a cool dude"
>>> s.find('dude')
4
20 голосов
/ 19 декабря 2017

Краткий обзор: index и find

Рядом с методом find также существует index.find и index оба дают одинаковый результат: возвращая позицию первого вхождения, , но , если ничего не найдено index повысит ValueError, тогда как find вернет -1.По скорости оба имеют одинаковые результаты тестов.

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

Дополнительные знания: rfind и rindex:

В общем случае find и index возвращают наименьший индекс, гдепереданная строка начинается, и rfind и rindex возвращают наибольший индекс, с которого она начинается. Большинство алгоритмов поиска строк выполняют поиск с слева направо , поэтому функции, начинающиеся с r, указывают, что поискпроисходит с справа налево .

Таким образом, в случае, если вероятность элемента, который вы ищете, ближе к концу, чем к началу списка, rfind или rindex будет быстрее.

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

Источник: Python: Visual QuickStart Guide, Тоби Дональдсон

1 голос
/ 30 января 2019

для реализации этого алгоритмическим способом, без использования встроенной функции Python.Это может быть реализовано как

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...