Функция find в Python: что делает и как использовать метод find()

0
12

Краткая памятка по работе с find() в Python

  1. Метод find() ищет подстроку в строке и возвращает индекс первого вхождения.
  2. Если подстрока не найдена, возвращается -1.
  3. Синтаксис: строка.find(подстрока, start, end).
  4. Параметры start и end необязательны и задают диапазон поиска.
  5. Метод чувствителен к регистру.
  6. Для поиска справа налево используйте rfind().
  7. find() не вызывает исключение при отсутствии подстроки (в отличие от index()).
  8. Используйте цикл для поиска всех вхождений подстроки.
  9. Метод работает только со строками (тип str).
  10. Для проверки наличия подстроки можно использовать оператор in.

Описание метода find()

Программирование на - изображение номер один
Программирование на — изображение номер один

Функция find() в языке python (питон) используется для поиска первого вхождения символа или подстроки во всей строке, либо только в ее отрезке.

найти подстроку в строке python. Конечно, сначала будет казаться, что лучше бы возвращался и начальный и конечный элемент, но в таком случае тогда придется создавать список.
Примечательно, что если в качестве аргумента, который необходимо найти, отправить подстроку, то ошибка не вернется. Вместо этого функция решит

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

1., для списков и словарей используются совсем другие методы.
Метод find работает только со строками

Если же нужная подстрока или буква не были найдены внутри строки, то возвращается значение -1.

Кстати, если вы уже думаете сделать конструкцию, в которой с помощью функции find определяется индекс, а после сразу происходит вывод по этому индексу, то это плохая идея. Если буква не будет найдена, то будет возвращено значение -1 (как мы уже говорили).

Если обратиться к минус первому элементу, то питон вернет самый последний элемент (например, в слово «сайт» элемент с индексом -1 – это «т»). Дело в том, что когда в качестве индекса указывается отрицательное число, то минус исчезает, но отсчет начинается с конца.

Следственно, при работе с find стоит дополнительно использовать условия (о них читайте в предыдущих статьях).

Python - изображение номер два
Python — изображение номер два

Учебная программа “Программирование на Python” создана для тех, кто хочет с нуля освоить 3й по популярности язык в мире, и создавать на нем от простых приложений до высоконагруженных web-сервисов.

В основе программы лежат реальные требования IT-рынка. Методисты и преподаватели постоянно работают над ее улучшением и обновлением, чтобы выпускники Академии Top могли достойно показать себя перед работодателем.

  • Введение в веб-технологий. Структура HTML. Форматирование текста с помощью HTML
  • Форматирование с помощью CSS. Списки. Отступы и поля
  • Графика в веб-дизайне. Оптимизация графики. Гиперссылки. Принципы навигации сайта
  • Таблицы. Формы. Фреймы
  • И многое другое
ЧИТАТЬ ТАКЖЕ:  Создание собственной структуры в Python: организация кода, модульная архитектура и шаблоны

Синтаксис

Урок 11 - изображение номер три
Урок 11 — изображение номер три

Find не является самостоятельной функцией, а только методом для объекта типа string.

То есть для начала необходимо создать переменную строкового типа, а после обратиться через него к нужной функции.

Вместо «string» необходимо указать строку, в которой происходит поиск, вместо char подставляем букву или подстроку, которые нужно найти. Последние два аргумента необходимы для установки начального и конечного значения, но об этом немного позже. Разберемся на конкретном примере.

Python 51 - изображение номер четыре
Python 51 — изображение номер четыре

Поиск символа или подстроки в строке

Программирование на языке - изображение номер пять
Программирование на языке — изображение номер пять

У нас есть последовательность букв английского алфавита, но только в этой последовательности не все буквы, а потому вручную указать индекс не получится. Необходимо по введенной букве, определить ее индекс и вывести все буквы после этого индекса. И так, как будет выглядеть решение:

Готово. Если бы не find, тогда разработчику пришлось бы создавать цикл while с счетчиком, сверять каждый элемент с введенным пользователем, а после, если символ был найден, выводить его индекс, который находился в счетчике. Не совсем удобно, потому рекомендуем пользоваться только готовой функцией.

Python: поиск подстроки, операции со строками - изображение номер шесть
Python: поиск подстроки, операции со строками — изображение номер шесть

А если вспомнить, что с помощью циклов будет проблематично проверить подстроку, то это еще сильнее повышает любовь к встроенным функциям типа этой.

Кстати, давайте попробуем искать не по символу, а по подстроке. Сразу пример из жизни: вспомните школьные года, когда на некоторых предметах было деление по группам. Представим, что необходимо вывести две части строки.

Первая часть – это первая группа, а вторая – вторая группа. Разделять их будет введённое имя.

Поиск символа в подстроке со start и end

Работа со строками в python - презентация, доклад, проект скачать - изображение номер семь
Работа со строками в python — презентация, доклад, проект скачать — изображение номер семь

Периодически возникает необходимость искать только в отдельном отрезке строки. Например, если на вход поступает строка формата: «Запись № 0001 *текст*», то искать нужно только после цифр, так как они не несут никакой ценности.

Или допустим есть строка: «*имена* — студенты, пришедшие на пересдачу». Зачем обрабатывать эту константную фразу, ведь важны только имена. Так вот, чтобы ограничить отрезок, где будет проверяться элемент, используются необязательные аргументы start и end. Соответственно, start отвечает за начало отрезка строки, а end за конец.

По умолчанию start = 0, а end = -1. Название аргумента указывать необязательно.

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

Рассмотрим пример, когда нужно искать только с определенного элемента:

ЧИТАТЬ ТАКЖЕ:  Метод Count в Python: Для Чего Он Нужен и Как Использовать

Python startswith - изображение номер восемь
Python startswith — изображение номер восемь

Как видно на скриншоте, слово «сегодня» есть в переменной, но оно не было найдено, так как не принадлежит промежутку, указанному при вызове метода, а потому в учет не принималось.

Проверка есть ли символ в строке

Индекс в пайтон - изображение номер девять
Индекс в пайтон — изображение номер девять

Самые смекалистые могли заметить, что обращение к найденному индексу – это не единственная особенность метода find. С помощью него разработчик также может проверить наличие подстроки в переменной. Это действительно так.

Достаточно сделать условие: если find вернул отрицательное число, значит нужной подстроки нет, иначе есть. Однако, это нерационально. Для таких случаев в python предусмотрено ключевое слово «in».

Чтобы проверить, есть ли подстрока в строке необходимо использовать следующий синтаксис:

Если word есть в string, то x присвоится True, иначе False. Рассмотрим на реальном примере:

Как вы уже догадались, первый вывод будет True, а второй False. Так что на будущее: не придумывайте велосипед, если есть готовая замена.

Метод rfind()

Во всех примерах выше мы могли находить первое вхождение символа или подстроки. Однако, что делать, если считывать необходимо с конца. В таком случае необходимо использовать похожую по написанию функцию rfind.

Она начинает парсинг элементов с конца. И, кстати, нумерует она символы также сначала.

Допустим, если есть переменная из 20 символов, а нужный символ окажется на 18 позиции, то функция и вернет 18, а не 2 (ведь 20 – 18 = 2, а проверяет то она с конца).

Программа выведет число 65, но если бы мы использовали find, то ответ был бы 55. Потому что тогда программа сначала бы увидела отдельную букву «ф», а после только «ф» в слове «фольклор».

rfind() in - изображение номер десять
rfind() in — изображение номер десять

Часто задаваемые вопросы о функции 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().