Что такое функция find в Python?
Метод find() используется для поиска в строке. В качестве обязательного аргумента принимает строку, которую нужно найти. Метод возвращает индекс символа, с которого начинается искомая строка. Если строка не найдена, метод вернет -1 .
txt = 'Hello, welcome to my world.' x = txt.find('welcome') print(x) # => 7
В качестве необязательных аргументов метод также принимает начало (с какого индекса начать поиск, по умолчанию это 0 — начало строки), а также конец (на каком индексе закончить поиск строки, по умолчанию поиск проводится по всей строке).
string.find
s — Строка, для которой следует отыскать индекс подстроки.
sub — Подстрока, начальный индекс размещения которой требуется определить.
start=0 — Индекс начала среза в исходной строке, в котором требуется отыскать подстроку.
end=None — Индекс конца среза в исходной строке, в котором требуется отыскать подстроку.
import string
my_str = 'barbarian'
string.find(my_str, 'bar') # 0
string.find(my_str, 'bar', 1) # 3
string.find(my_str, 'bar', 1, 2) # -1
Если подстрока не найдена, возвращает -1 .
Функция должна использоваться только в случае необходимости найти индекс начала подстроки. Для обычного определение вхождения подстроки используйте оператор in : ‘bar’ in ‘barbarian’ # True .
Необязательные параметры start и end могут принимать любые значения, поддерживаемые механизмом срезов, а значит и отрицательные.
Типы данных
Метод find находит в данной строке (к которой применяется метод) данную подстроку (которая передается в качестве параметра). Функция возвращает индекс первого вхождения искомой подстроки. Если же подстрока не найдена, то метод возвращает значение -1. Например:
>>> S = 'Hello'
>>> print(S.find('e'))
1
>>> print(S.find('ll'))
2
>>> print(S.find('L'))
-1
Аналогично, метод rfind возвращает индекс последнего вхождения данной строки (“поиск справа”).
>>> S = 'Hello'
>>> print(S.find('l'))
2
>>> print(S.rfind('l'))
3
Если вызвать метод find с тремя параметрами S.find(T, a, b), то поиск будет осуществляться в срезе S[a:b]. Если указать только два параметра S.find(T, a), то поиск будет осуществляться в срезе S[a:], то есть начиная с символа с индексом a и до конца строки. Метод S.find(T, a, b) возращает индекс в строке S, а не индекс относительно начала среза.
Метод find в Python
Python
Автор Сергей Тимофеев На чтение 8 мин Просмотров 16.5к. Обновлено 15.09.2023
В статье подробно разбираем метод find() в Python: описание, синтаксис, применение.
Описание метода find()
Функция find() в языке python (питон) используется для поиска первого вхождения символа или подстроки во всей строке, либо только в ее отрезке.
Примечательно, что если в качестве аргумента, который необходимо найти, отправить подстроку, то ошибка не вернется. Вместо этого функция решит найти подстроку в строке python . Конечно, сначала будет казаться, что лучше бы возвращался и начальный и конечный элемент, но в таком случае тогда придется создавать список.
Да и к тому же, если разработчик будет знать размер искомой строки, индекс первого элемента, то он может получить и индекс последнего элемента, прибавив размер подстроки и отняв.
1. Метод find работает только со строками , для списков и словарей используются совсем другие методы.
Если же нужная подстрока или буква не были найдены внутри строки, то возвращается значение -1.
Кстати, если вы уже думаете сделать конструкцию, в которой с помощью функции find определяется индекс, а после сразу происходит вывод по этому индексу, то это плохая идея. Если буква не будет найдена, то будет возвращено значение -1 (как мы уже говорили).
Если обратиться к минус первому элементу, то питон вернет самый последний элемент (например, в слово «сайт» элемент с индексом -1 – это «т»). Дело в том, что когда в качестве индекса указывается отрицательное число, то минус исчезает, но отсчет начинается с конца.
Следственно, при работе с find стоит дополнительно использовать условия (о них читайте в предыдущих статьях).

Пройдите обучение “Программирование на Python”, нажимите на ссылку Топ Академии, чтобы записаться.
Учебная программа “Программирование на Python” создана для тех, кто хочет с нуля освоить 3й по популярности язык в мире, и создавать на нем от простых приложений до высоконагруженных web-сервисов.
- Введение в веб-технологий. Структура HTML. Форматирование текста с помощью HTML
- Форматирование с помощью CSS. Списки. Отступы и поля
- Графика в веб-дизайне. Оптимизация графики. Гиперссылки. Принципы навигации сайта
- Таблицы. Формы. Фреймы
- И многое другое
Синтаксис
Find не является самостоятельной функцией, а только методом для объекта типа string.
То есть для начала необходимо создать переменную строкового типа, а после обратиться через него к нужной функции.
Сам синтаксис функции выглядит следующим образом:
s.find(str, start, end)
Вместо «string» необходимо указать строку, в которой происходит поиск, вместо char подставляем букву или подстроку, которые нужно найти. Последние два аргумента необходимы для установки начального и конечного значения, но об этом немного позже. Разберемся на конкретном примере.

Поиск символа или подстроки в строке
У нас есть последовательность букв английского алфавита, но только в этой последовательности не все буквы, а потому вручную указать индекс не получится. Необходимо по введенной букве, определить ее индекс и вывести все буквы после этого индекса. И так, как будет выглядеть решение:
alphabet = "abcdfghjmnopqrsuvwxz" # алфавит с пробелами symbol_for_find = input("Введите начальный символ:") index_of_symbol = alphabet.find(symbol_for_find) # поиск индекса символа if (index_of_symbol >= 0): # если метод find нашел символ, а потому не вернул отрицательное число print(alphabet[index_of_symbol:]) # вывод строки от введенного индекса и до конца else: print("Простите, но в нашем псевдоалфавите нет введенной буквы")
Готово. Если бы не find, тогда разработчику пришлось бы создавать цикл while с счетчиком, сверять каждый элемент с введенным пользователем, а после, если символ был найден, выводить его индекс, который находился в счетчике. Не совсем удобно, потому рекомендуем пользоваться только готовой функцией.

А если вспомнить, что с помощью циклов будет проблематично проверить подстроку, то это еще сильнее повышает любовь к встроенным функциям типа этой.
Кстати, давайте попробуем искать не по символу, а по подстроке. Сразу пример из жизни: вспомните школьные года, когда на некоторых предметах было деление по группам. Представим, что необходимо вывести две части строки.
Первая часть – это первая группа, а вторая – вторая группа. Разделять их будет введённое имя.
Реализация (не забывайте, регистр важен):
students = "Karl, Misha, Olga, Steve, Oliver, Harry, Jone, Damir, Eliot, Mister" split_student = input("Введите имя студента, на котором начинается вторая группа:") split_index = students.find(split_student) # получаем разделительный индекс (индекс соответствует первому введенному символу) if(split_index >= 0): # проверяем его существование print("Первая группа:", students[:split_index - 2]) # выводим первую группу. -2 нужен для того, чтобы убрать лишние запятые в конце print("Вторая группа:", students[split_index:]) # выводим вторую группу else: print("Студент не найден")
и снова результат на картинке ниже.

Невероятно крутой инструмент, и при этом простой в исполнении.
Поиск символа в подстроке со start и end
Периодически возникает необходимость искать только в отдельном отрезке строки. Например, если на вход поступает строка формата: «Запись № 0001 *текст*», то искать нужно только после цифр, так как они не несут никакой ценности.
Или допустим есть строка: «*имена* — студенты, пришедшие на пересдачу». Зачем обрабатывать эту константную фразу, ведь важны только имена. Так вот, чтобы ограничить отрезок, где будет проверяться элемент, используются необязательные аргументы start и end. Соответственно, start отвечает за начало отрезка строки, а end за конец.
По умолчанию start = 0, а end = -1. Название аргумента указывать необязательно.
То есть, в функции в первую очередь указывается символ для поиска, после начальный элемент, и только после этого конечный элемент.
Рассмотрим пример, когда нужно искать только с определенного элемента:
tasklist = "Задачи на сегодня: Купить продукты, навестить друга, найти работу, отвести машину в ремонт. Успеть бы до 11" begin_char = tasklist.find(':') # мы знаем, что список начинается с двоеточия end_char = -15 # убираем 15 последних символов с конца text = input("Введите задачу, с которой нужно начать отсчет:") index = tasklist.find(text, begin_char, end_char) # проверка с выбором начала и конца отрезка if ( index >= 0 ): print (tasklist[index:end_char]) # вывести с выбранного индекса и до конца списка (но не строки) else: print ("пункт не найден")

Как видно на скриншоте, слово «сегодня» есть в переменной, но оно не было найдено, так как не принадлежит промежутку, указанному при вызове метода, а потому в учет не принималось.
Проверка есть ли символ в строке
Самые смекалистые могли заметить, что обращение к найденному индексу – это не единственная особенность метода find. С помощью него разработчик также может проверить наличие подстроки в переменной. Это действительно так.
Достаточно сделать условие: если find вернул отрицательное число, значит нужной подстроки нет, иначе есть. Однако, это нерационально. Для таких случаев в python предусмотрено ключевое слово «in».
Чтобы проверить, есть ли подстрока в строке необходимо использовать следующий синтаксис:
x = word in string
Если word есть в string, то x присвоится True, иначе False. Рассмотрим на реальном примере:
cities = "Moscow, Novosibirsk, Rostov, Magadan, Peterburg, Donetsk" word = "Novosibirsk" word1 = "Krasnodar" x = word in cities x1 = word1 in cities print(x) print(x1)
Как вы уже догадались, первый вывод будет True, а второй False. Так что на будущее: не придумывайте велосипед, если есть готовая замена.
Метод rfind()
Во всех примерах выше мы могли находить первое вхождение символа или подстроки. Однако, что делать, если считывать необходимо с конца. В таком случае необходимо использовать похожую по написанию функцию rfind.
Она начинает парсинг элементов с конца. И, кстати, нумерует она символы также сначала.
Допустим, если есть переменная из 20 символов, а нужный символ окажется на 18 позиции, то функция и вернет 18, а не 2 (ведь 20 – 18 = 2, а проверяет то она с конца).
Это полезно, главное не запутаться.
И как обычно пример:
string = "Эта простая строка, у которой в конце неожиданно буква ф в слове фольклор появилась" x = string.rfind('ф') print(x)
Программа выведет число 65, но если бы мы использовали find, то ответ был бы 55. Потому что тогда программа сначала бы увидела отдельную букву «ф», а после только «ф» в слове «фольклор».

Вывод
Сначала кажется, что метод find не несет никакой пользы. В будущем в практике часто придется искать индексы элементов по их значению. Например, чтобы делить строки или анализировать содержимое, ну или очищать мусорный контент. Главное научиться, а применение всегда найдется.
Похожие записи:
- Интерпретаторы Python в 2023 году – Топ 12 для компьютеров и смартфонов
- If-elif-else в Python: что это, как работает
- Методы split и str.rsplit в языке Python
- Подборка лучших книг по Python в 2023 году
- Множество Python в 2023 году: как создать, как работать, свойства, операции, методы
- Функции в Python и их аргументы – вызов функций, def, return
- Курсы Python в 2023 году – Топ-30 бесплатных и платных для начинающих
- Циклы for, while в Python
- Метод replace() в Python
- Курсы программирования Python в 2023 году – программа обучения, нужные навыки
