В этой статье мы разберем, как при помощи Python определить количество вхождений символа или подстроки в строке. Вы узнаете о четырех различных способах достижения этой цели, включая использование встроенного строкового метода .count()
и фантастического модуля counter
.
Умение посчитать количество вхождений подстроки в строке – невероятно полезный навык, позволяющий находить, скажем, дубликаты значений в строке или удалять ненужные символы (например, специальные).
Скачивайте книги ТОЛЬКО на русском языке у нас в телеграм канале: PythonBooksRU
Считаем количество вхождений символа в строку с помощью метода .count()
Один из способов посчитать количество вхождений подстроки в строку – использовать встроенный строковый метод .count()
. Метод принимает один аргумент – символ или подстроку – и возвращает количество повторений этого символа в строке, для которой он вызван.
Этот метод очень прост в реализации. В приведенном ниже примере мы загрузим образец строки, а затем подсчитаем, сколько раз встречается как просто символ, так и подстрока:
a_string = 'the quick brown fox jumps over the lazy dog' print('o appears this many times: ', a_string.count('o')) print('the appears this many times: ', a_string.count('the')) # Результат: # o appears this many times: 4 # the appears this many times: 2
В этом примере мы использовали встроенный метод .count()
, чтобы посчитать, сколько раз в строке встречается символ “o” и подстрока “the”.
Примечание редакции: вас также может заинтересовать статья “Как удалить все повторения символа в списке или строке в Python”.
Считаем количество вхождений символа в строку с помощью счетчика
Использование объекта Counter
из встроенного модуля collections
– более гибкий и эффективный способ подсчета вхождений символа в строку. Модуль предоставляет ряд полезных классов для работы с коллекциями различных элементов.
В данном случае наша коллекция будет представлять собой строку: “the quick brown fox jumps over the lazy dog”.
from collections import Counter a_string = 'the quick brown fox jumps over the lazy dog' collection = Counter(a_string) print(collection) # Результат: # Counter({' ': 8, 'o': 4, 'e': 3, 't': 2, 'h': 2, 'u': 2, 'r': 2, 'q': 1, 'i': 1, 'c': 1, 'k': 1, 'b': 1, 'w': 1, 'n': 1, 'f': 1, 'x': 1, 'j': 1, 'm': 1, 'p': 1, 's': 1, 'v': 1, 'l': 1, 'a': 1, 'z': 1, 'y': 1, 'd': 1, 'g': 1})
Алгоритм наших действий здесь следующий:
- Мы импортировали
Counter
из модуляcollections
- Затем мы присвоили нашу строку переменной
a_string
- Мы передали строку в объект
Counter
и назвали егоcollection
- Наконец, мы распечатали новый объект
collection
Вы можете видеть, что возвращается объект Counter
. Мы можем подтвердить это, выполнив print(type(collection))
и получив в результате <class 'collections.Counter'>
.
Что замечательно в этом классе, так это то, что он содержит элемент, похожий на словарь, который содержит количество вхождений каждого элемента в переданный итерируемый объект.
Это означает, что мы можем получить количество вхождений любого элемента, обратившись к объекту по ключу, как если бы у нас был словарь. Например, можно посмотреть, как часто встречаются буквы “a” и “e”:
from collections import Counter a_string = 'the quick brown fox jumps over the lazy dog' collection = Counter(a_string) print(collection['a']) print(collection['e']) # Результат: # 1 # 3
В этом и заключается волшебство класса Counter
: он позволяет легко получить доступ к числу вхождений элементов в итерируемых объектах Python, таких как string.
Как посчитать количество вхождений символа в строку при помощи RegEx
Для подсчета количества вхождений подстроки в строку также можно использовать регулярные выражения (regex). Этот подход немного избыточен, но если вы знакомы с regex, его можно легко реализовать!
Мы будем использовать модуль регулярных выражений, а именно метод .findall()
для загрузки индексов, под которыми встречается символ или подстрока. Затем мы воспользуемся встроенной в Python функцией len()
, чтобы узнать, как часто встречается символ или подстрока.
Давайте посмотрим, как это работает:
import re a_string = 'the quick brown fox jumps over the lazy dog' print(len(re.findall('o', a_string))) # Результат: # 4
Как видите, подход немного странный, особенно по сравнению с теми, которые мы уже рассмотрели.
Использование цикла for для подсчета вхождений в строку
Использование цикла for
для подсчета вхождений символа в строку – немного наивное решение, но иногда оно может пригодиться.
Принцип работы основан на том, что строки – это итерируемые объекты, то есть вы можете перебирать символы строки и подсчитывать их. Рассмотрим пример:
a_string = 'the quick brown fox jumps over the lazy dog' count_o = 0 for character in a_string: if character == 'o': count_o += 1 else: pass print(count_o) # Результат: # 4
Что мы здесь сделали:
- Инициализировали новую строку
- Установили переменную
count_o
в 0 - Перебрали все символы в строке, проверяя, равен ли каждый из них символу “o”. Если да, то значение переменной
count_o
увеличивается на 1. В противном случае ничего не делается.
Это решение работает, но его немного утомительно записывать, и оно не очень быстро для больших строк.
Заключение
Из этой статьи вы узнали, как при помощи Python посчитать количество вхождений в строку символа или подстроки. Мы разобрали четыре разных подхода: с использованием встроенного метода .count()
, класса Counter
из collections
, метода .findall()
из модуля re
, а также цикла for
.
Если вы хотите узнать больше о классе Counter, ознакомьтесь с официальной документацией.
Перевод статьи «Python: Count Number of Occurrences in a String (4 Ways!)».