Как посчитать количество вхождений символа в строку

В этой статье мы разберем, как при помощи 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})

Алгоритм наших действий здесь следующий:

  1. Мы импортировали Counter из модуля collections
  2. Затем мы присвоили нашу строку переменной a_string
  3. Мы передали строку в объект Counter и назвали его collection
  4. Наконец, мы распечатали новый объект 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

Что мы здесь сделали:

  1. Инициализировали новую строку
  2. Установили переменную count_o в 0
  3. Перебрали все символы в строке, проверяя, равен ли каждый из них символу “o”. Если да, то значение переменной count_o увеличивается на 1. В противном случае ничего не делается.

Это решение работает, но его немного утомительно записывать, и оно не очень быстро для больших строк.

Заключение

Из этой статьи вы узнали, как при помощи Python посчитать количество вхождений в строку символа или подстроки. Мы разобрали четыре разных подхода: с использованием встроенного метода .count(), класса Counter из collections, метода .findall() из модуля re, а также цикла for.

Если вы хотите узнать больше о классе Counter, ознакомьтесь с официальной документацией.

Перевод статьи «Python: Count Number of Occurrences in a String (4 Ways!)».

Оставьте комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *