Как я могу найти первое вхождение подстроки в строке Python?


123

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

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

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

Ответы:


213

find()

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

20
Он возвращается, -1если не найден
Кристоф Русси

что, если я хочу найти слово isв предложении this is a cool dude? Я попробовал найти метод, но он возвращает индекс 2 вместо 5. Как мне добиться этого с помощью find ()?
Regressor

@Regressor: изучите границы регулярных выражений и слов.
Mechanical_meat

28

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

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

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:

В общем, найти и проиндексировать вернуть наименьший индекс , где прошел строковые начинается, а 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, Toby Donaldson


если строка определена как input_string = "this is a sentence"и если мы хотим найти первое вхождение слова is, то будет ли это работать? # 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

реализовать это алгоритмически, не используя встроенную функцию 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

0
def find_pos(chaine,x):

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

6
Похоже, у вас отключен отступ, и вы забыли закрыть кавычки. Также полезно объяснение вашего кода и того, почему он решает проблему; см. Как ответить
Камилла,

извините, я редактирую это ... мой код находит первое появление буквы в строке и возвращает его место
Бенмадани Язид

0

verse = "Если ты можешь не терять голову, когда все вокруг тебя \ n Теряешь свою и винишь в этом тебя, \ nЕсли ты можешь доверять себе, когда все мужчины сомневаются в тебе, \ n Но учти и их сомнения; \ nЕсли можешь ждать и не уставать от ожидания, \ n Или быть обманутым, не лгать, \ nИли быть ненавистным, не поддаваться ненависти, \ n И все же не выглядеть слишком хорошо и не говорить слишком мудро :»

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

Добро пожаловать в Stack Overflow. Вы отвечаете на старый и уже отвеченный вопрос (ответ с зеленой галочкой) без дополнительной информации или лучшего объяснения. Таким образом, он просто дублирует принятый ответ . Взгляните на Как мне написать хороший ответ? , (И для получения дополнительной информации ознакомьтесь с разделом Как справиться с удалением явно повторяющихся ответов («серфинг») на популярные вопросы ).
Иво Мори
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.