Поиск и форматирование строк
Уроки курсаПоиск и форматирование строк
В прошлом уроке мы разобрали методы, которые преобразуют строку: strip() убирал пробелы, replace() менял символы, split() и join() разбивали и собирали текст. Все эти методы что-то делали со строкой и возвращали новую. Сегодня добавляем другой класс методов — те, что не меняют строку, а ищут в ней информацию и возвращают либо позицию, либо количество, либо булево значение. Начнём с find().
Поиск подстроки: метод find() и ловушка с -1
Метод find() отвечает на вопрос: «С какой позиции начинается эта подстрока в строке?». Он возвращает индекс первого символа первого вхождения — или -1, если подстрока не найдена.
text = 'hello world'
print(text.find('world')) # 6
print(text.find('ll')) # 2
print(text.find('xyz')) # -1
Индекс 6 означает, что слово 'world' начинается на шестой позиции строки (считая с нуля). Если подстрока встречается несколько раз, find() возвращает позицию только первого вхождения.
Важная деталь: find() в отличие от index() никогда не бросает исключение. Если подстрока не найдена — просто вернёт -1. Это удобно, но тут же прячется ловушка.
Ловушка: проверять результат надо явно
Когда хочется узнать, есть ли подстрока в строке, интуитивно пишут так:
text = 'python is great'
if text.find('python'):
print('Нашли!')
Этот код работает неправильно. find('python') вернул 0 — подстрока 'python' стоит в самом начале строки, на нулевой позиции. Но 0 в Python — ложное значение, и условие if 0 не выполнится. Программа не выведет 'Нашли!', хотя подстрока есть.
Правильная проверка — явное сравнение с -1:
text = 'python is great'
if text.find('python') != -1:
print('Нашли!')
Теперь логика корректна: мы проверяем не «правдивость» числа, а конкретно «не равно минус одному».
Альтернативно для простой проверки наличия подстроки можно использовать оператор in:
if 'python' in text:
print('Нашли!')
in читается проще и не создаёт путаницы с нулевым индексом. Но find() незаменим, когда нужна именно позиция — например, чтобы вырезать часть строки или проверить, где именно встречается слово.
