Содержание
Краткая памятка по работе с find() в Python
- Метод find() ищет подстроку в строке и возвращает индекс первого вхождения.
- Если подстрока не найдена, возвращается -1.
- Синтаксис: строка.find(подстрока, start, end).
- Параметры start и end необязательны и задают диапазон поиска.
- Метод чувствителен к регистру.
- Для поиска справа налево используйте rfind().
- find() не вызывает исключение при отсутствии подстроки (в отличие от index()).
- Используйте цикл для поиска всех вхождений подстроки.
- Метод работает только со строками (тип str).
- Для проверки наличия подстроки можно использовать оператор in.
Описание метода find()
Функция find() в языке python (питон) используется для поиска первого вхождения символа или подстроки во всей строке, либо только в ее отрезке.
найти подстроку в строке python. Конечно, сначала будет казаться, что лучше бы возвращался и начальный и конечный элемент, но в таком случае тогда придется создавать список.
Примечательно, что если в качестве аргумента, который необходимо найти, отправить подстроку, то ошибка не вернется. Вместо этого функция решит
Да и к тому же, если разработчик будет знать размер искомой строки, индекс первого элемента, то он может получить и индекс последнего элемента, прибавив размер подстроки и отняв.
1., для списков и словарей используются совсем другие методы.
Метод find работает только со строками
Если же нужная подстрока или буква не были найдены внутри строки, то возвращается значение -1.
Кстати, если вы уже думаете сделать конструкцию, в которой с помощью функции find определяется индекс, а после сразу происходит вывод по этому индексу, то это плохая идея. Если буква не будет найдена, то будет возвращено значение -1 (как мы уже говорили).
Если обратиться к минус первому элементу, то питон вернет самый последний элемент (например, в слово «сайт» элемент с индексом -1 – это «т»). Дело в том, что когда в качестве индекса указывается отрицательное число, то минус исчезает, но отсчет начинается с конца.
Следственно, при работе с find стоит дополнительно использовать условия (о них читайте в предыдущих статьях).
Учебная программа “Программирование на Python” создана для тех, кто хочет с нуля освоить 3й по популярности язык в мире, и создавать на нем от простых приложений до высоконагруженных web-сервисов.
В основе программы лежат реальные требования IT-рынка. Методисты и преподаватели постоянно работают над ее улучшением и обновлением, чтобы выпускники Академии Top могли достойно показать себя перед работодателем.
- Введение в веб-технологий. Структура HTML. Форматирование текста с помощью HTML
- Форматирование с помощью CSS. Списки. Отступы и поля
- Графика в веб-дизайне. Оптимизация графики. Гиперссылки. Принципы навигации сайта
- Таблицы. Формы. Фреймы
- И многое другое
Синтаксис
Find не является самостоятельной функцией, а только методом для объекта типа string.
То есть для начала необходимо создать переменную строкового типа, а после обратиться через него к нужной функции.
Вместо «string» необходимо указать строку, в которой происходит поиск, вместо char подставляем букву или подстроку, которые нужно найти. Последние два аргумента необходимы для установки начального и конечного значения, но об этом немного позже. Разберемся на конкретном примере.
Поиск символа или подстроки в строке
У нас есть последовательность букв английского алфавита, но только в этой последовательности не все буквы, а потому вручную указать индекс не получится. Необходимо по введенной букве, определить ее индекс и вывести все буквы после этого индекса. И так, как будет выглядеть решение:
Готово. Если бы не find, тогда разработчику пришлось бы создавать цикл while с счетчиком, сверять каждый элемент с введенным пользователем, а после, если символ был найден, выводить его индекс, который находился в счетчике. Не совсем удобно, потому рекомендуем пользоваться только готовой функцией.
А если вспомнить, что с помощью циклов будет проблематично проверить подстроку, то это еще сильнее повышает любовь к встроенным функциям типа этой.
Кстати, давайте попробуем искать не по символу, а по подстроке. Сразу пример из жизни: вспомните школьные года, когда на некоторых предметах было деление по группам. Представим, что необходимо вывести две части строки.
Первая часть – это первая группа, а вторая – вторая группа. Разделять их будет введённое имя.
Поиск символа в подстроке со start и end
Периодически возникает необходимость искать только в отдельном отрезке строки. Например, если на вход поступает строка формата: «Запись № 0001 *текст*», то искать нужно только после цифр, так как они не несут никакой ценности.
Или допустим есть строка: «*имена* — студенты, пришедшие на пересдачу». Зачем обрабатывать эту константную фразу, ведь важны только имена. Так вот, чтобы ограничить отрезок, где будет проверяться элемент, используются необязательные аргументы start и end. Соответственно, start отвечает за начало отрезка строки, а end за конец.
По умолчанию start = 0, а end = -1. Название аргумента указывать необязательно.
То есть, в функции в первую очередь указывается символ для поиска, после начальный элемент, и только после этого конечный элемент.
Рассмотрим пример, когда нужно искать только с определенного элемента:
Как видно на скриншоте, слово «сегодня» есть в переменной, но оно не было найдено, так как не принадлежит промежутку, указанному при вызове метода, а потому в учет не принималось.
Проверка есть ли символ в строке
Самые смекалистые могли заметить, что обращение к найденному индексу – это не единственная особенность метода find. С помощью него разработчик также может проверить наличие подстроки в переменной. Это действительно так.
Достаточно сделать условие: если find вернул отрицательное число, значит нужной подстроки нет, иначе есть. Однако, это нерационально. Для таких случаев в python предусмотрено ключевое слово «in».
Чтобы проверить, есть ли подстрока в строке необходимо использовать следующий синтаксис:
Если word есть в string, то x присвоится True, иначе False. Рассмотрим на реальном примере:
Как вы уже догадались, первый вывод будет True, а второй False. Так что на будущее: не придумывайте велосипед, если есть готовая замена.
Метод rfind()
Во всех примерах выше мы могли находить первое вхождение символа или подстроки. Однако, что делать, если считывать необходимо с конца. В таком случае необходимо использовать похожую по написанию функцию rfind.
Она начинает парсинг элементов с конца. И, кстати, нумерует она символы также сначала.
Допустим, если есть переменная из 20 символов, а нужный символ окажется на 18 позиции, то функция и вернет 18, а не 2 (ведь 20 – 18 = 2, а проверяет то она с конца).
Программа выведет число 65, но если бы мы использовали find, то ответ был бы 55. Потому что тогда программа сначала бы увидела отдельную букву «ф», а после только «ф» в слове «фольклор».
Часто задаваемые вопросы о функции find в Python
Вопрос: Что возвращает метод find(), если подстрока не найдена?
Ответ: Метод возвращает -1.
Вопрос: В чем разница между find() и index()?
Ответ: index() вызывает исключение ValueError при отсутствии подстроки, а find() возвращает -1.
Вопрос: Можно ли использовать find() для поиска в списке?
Ответ: Нет, find() работает только со строками. Для списков используйте метод index().
Вопрос: Как найти все вхождения подстроки с помощью find()?
Ответ: Используйте цикл, каждый раз начиная поиск с позиции (последнее_вхождение + 1).
Вопрос: Чувствителен ли find() к регистру?
Ответ: Да, find() различает заглавные и строчные буквы.
Вопрос: Как работает параметр start в find()?
Ответ: Параметр start задает индекс, с которого начинается поиск в строке.
Вопрос: Как работает параметр end в find()?
Ответ: Параметр end задает индекс, на котором поиск заканчивается (не включая его).
Вопрос: Что делает метод rfind()?
Ответ: rfind() ищет подстроку справа налево и возвращает индекс последнего вхождения.
Вопрос: Можно ли искать пробел с помощью find()?
Ответ: Да, пробел — это обычный символ, его можно искать как ‘ ‘.
Вопрос: Как найти символ по его Unicode-коду с помощью find()?
Ответ: Используйте chr(код) для преобразования кода в символ, затем передайте его в find().























