Як я можу знайти перше виникнення підрядка в рядку 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 ()?
регресор

@Регресор: подивіться на регулярні вирази та межі слів.
механічне_місце

28

Короткий огляд: 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:

Загалом, знайти і проіндексувати повернути найменший індекс , де пройшов рядкові починається, а 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")
регресора

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
Здається, що ваш відступ вимкнено, і ви забули закрити лапки. Пояснення вашого коду та чому це вирішило б проблему також корисно; див. Як відповісти
camille

вибачте, я редагую це ... мій код знайде перше поява листа в рядку та поверне його місце
Бенмадані Язид

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

Ласкаво просимо до переповнення стека. Ви відповідаєте на старе і вже відповів на запитання (відповідайте зеленою галочкою), не даючи більше інформації та кращого пояснення. Таким чином, це в основному просто дублює прийняту відповідь . Подивіться, як я можу написати гарну відповідь? . (А для подальшого ознайомлення погляньте на те, як поводитися з очищенням пізніх відверто повторюваних відповідей ("серфінгу") на популярні запитання ).
Іво Морі
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.