Методы и функции строк в Python. Часть 2
В прошлой части мы начали рассказывать, что можно делать со строками. В этой мы продолжим рассказывать какие еще простые манипуляции можно выполнять с текстовой информацией.
Ловите ссылку на первую часть, если еще ее не видели. Итак, приступим...
Поиск, сравнение и анализ
В этом разделе мы собрали самые используемые методы поиска, сравнения и анализа строк ↓
Принадлежность строки
Часто в программах возникает необходимость проверить, является ли одна строка частью другой строки. Для этого в Python есть удобный оператор in. Он возвращает логическое значение True или False:
text = "Hello world!"
print("Hello" in text) # Выведет True
print("Hi" in text) # Выведет False
Оператор in удобно использовать для поиска определенных слов или фраз в строке:
book_title = "Learning Python"
if "Python" in book_title:
print("This book is about Python")
# Выведет: This book is about Python
* Со списоком книг по Python для начинающих вы можете ознакомиться здесь.
Также оператор in позволяет проверить вхождение символа в строку:
char = "р"
if char in "Привет":
print(f"Строка содержит {char}")
# Выведет Строка содержит р
Для проверки отсутствия подстроки можно использовать оператор not in:
print("five" not in "twenty one") # Выведет True
Оператор принадлежности строк часто используется в условных конструкциях и циклах при обработке текстовых данных.
Сравнение строк
Для сравнения строк в Python используются те же операторы, что и для других типов данных. Давайте выясним, что проверяет каждый оператор:
- == — равны ли две строки
- != — неравны ли две строки
- > — больше ли одна строка другой
- < — меньше ли одна строка другой
- >= — больше ли или равна одна строка другой
- <= — меньше ли или равна одна строка другой.
Важно: при сравнении строк символы сопоставляются последовательно слева направо. Сравнение выполняется посимвольно на основе кодов символов.
str1 = "abc"
str2 = "cba"
print(str1 < str2) # True
# Это происходит поскольку "a" < "c", так как символ "а" стоит раньше "с" в алфавите
Кроме того, сравнение регистрозависимо. Чтобы сравнить строки без учета регистра, их нужно предварительно привести к одному регистру:
str1 = "Python"
str2 = "python"
print(str1 == str2) # False
print(str1.lower() == str2.lower()) # True
Сравнение строк часто используется для сортировки, фильтрации, поиска одинаковых строк и в других задачах обработки текстовых данных.
Оценка и классификация строк
Python предоставляет удобные инструменты для анализа содержимого строк и их категоризации по определенным критериям. Это позволяет эффективно работать с текстовыми данными — проводить валидацию, фильтрацию, группировку. Для этих целей используются различные методы строк:
- isalpha() проверяет, состоит ли строка только из букв
str1 = "67 яблок в корзине"
str2 = "много яблок в корзине"
str3 = "многояблоквкорзине"
print(str1.isalpha())
# Выведет: False
print(str2.isalpha())
# Обратите внимание, что выведет тоже False, так как существуют пробелы в предложении
print(str3.isalpha()) # Выведет: True
- isdecimal() проверяет, что строка содержит только символы десятичных цифр от 0 до 9
str1 = "67 яблок в корзине"
str2 = "67"
str3 = "67.123"
str4 = "2²"
print(str1.isdecimal()) # Выведет: False
print(str2.isdecimal()) # Выведет: True
print(str3.isdecimal()) # Выведет: False
print(str4.isdecimal()) # Выведет: False
- isdigit() проверяет наличие в строке только цифр
str1 = "67 яблок в корзине"
str2 = "67"
str3 = "67.123"
str4 = "2²"
print(str1.isdigit()) # Выведет: False
print(str2.isdigit()) # Выведет: True
print(str3.isdigit()) # Выведет: False
print(str4.isdigit()) # Выведет: True
Помимо обычных арабских цифр (0-9), метод isdigit() также вернёт True для некоторых других символов, представленных в стандартах Unicode.
- isspace() возвращает истину, если в строке только пробельные символы
str1 = " "
str2 = "яблоки и орехи"
print(str1.isspace()) # Выведет: True
print(str2.isspace()) # Выведет: False
- istitle() возвращает истину, если каждое словое начинается с большой буквы
str1 = "Data Science"
str2 = "Data science"
str3 = "Data 20"
str4 = "@ Science"
print(str1.istitle()) # Выведет: True
print(str2.istitle()) # Выведет: False
print(str3.istitle()) # Выведет: True
print(str4.istitle()) # Выведет: True
# Обратите внимание, что использование цифр и спецсимволов тоже дает результат True
- islower() проверяет, что все символы в нижнем регистре
str1 = "я люблю программировать"
str2 = "Я люблю программировать"
print(str1.islower()) # Выведет: True
print(str2.islower()) # Вывдет: False
- isupper() проверяет, что все символы в верхнем регистре
str1 = "Я ЛЮБЛЮ ПРОГРАММИРОВАТЬ"
str2 = "Я люблю программировать"
print(str1.isupper()) # Выведет: True
print(str2.isupper()) # Вывдет: False
Определение длины строки
Длина строки — это количество символов, которое содержится в строке. В Python для определения длины строки используется встроенная функция len(). Для использования функции len() нужно передать в нее в качестве аргумента строку, длину которой хотим узнать:
length = len(my_string)
Обратите внимание, что функция len():
- Вернет целочисленное значение — количество символов в строке
- Подсчитывает абсолютно все символы в строке, включая пробелы, знаки препинания и специальные символы.
paragraph = "Этот абзац содержит разное количество символов и слов. Функция len() подсчитает их точное число."
print(len(paragraph)) # 96
Зачем нужна функция len()? — чтобы проверить, не превышает ли введенная пользователем строка максимально допустимую длину. Или чтобы разбить длинную строку на части заданного размера.
Работа с подстроками
Python предоставляет ряд методов для поиска и замены подстрок внутри строки. Они могут использоваться для извлечения нужных фрагментов текста, статистического анализа и обработки.
Поиск, подсчет и замена символов в строках
- find() — ищет подстроку в строке и возвращает индекс первого вхождения или -1, если не найдено
str = "Я хочу выучиться на Data Scientist в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится."
print(str.find("Эльбрус Буткемп")) # Выведет: 37
print(str.find("JavaScript")) # Выведет: -1
- rfind() — работает как find(), но возвращает индекс последнего вхождения подстроки
str = "Я хочу выучиться на Data Scientist в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится."
print(str.rfind("Эльбрус Буткемп")) # Выведет: 54
- index() — аналогичен find(), но генерирует исключение ValueError, если подстрока не найдена
str = "Я хочу выучиться на Data Scientist в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится."
print(str.index("JavaScript"))
# Выведет ошибку: ValueError: substring not found
Таким образом, если вы хотите обработать случай, когда подстрока может не быть найдена, и не вызывать исключение, лучше использовать find(). Если же вы хотите, чтобы программа остановилась с ошибкой, если подстрока не найдена, используйте index().
- rindex() — аналогичен rfind(), но генерирует исключение, если подстрока не найдена
- count() — возвращает количество вхождений подстроки в строке
str = "Я хочу выучиться на Data Scientist в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится."
print(str.count("Эльбрус Буткемп"))# Выведет: 2
- replace() — заменяет одну подстроку на другую и возвращает новую строку.
str = "Я хочу выучиться на Data Scientist в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится."
print(str.replace("Data Scientist", "веб-разработчика"))
# Выведет: Я хочу выучиться на веб-разработчика в Эльбрус Буткемп. Эльбрус Буткемп мне очень нравится.
Эти методы часто используются совместно для решения задач анализа текста и извлечения из него нужных данных.