Поиск по сайту:

Python – возможное количество подстрок из строки


В этой статье мы узнаем о различных методах, с помощью которых можно посчитать подстроку внутри заданной строки. Работая с Python, вы, возможно, сталкивались с ситуацией, когда вам нужно проверить, сколько раз данное слово встречается в предложении или любой строке, поэтому, чтобы получить количество подстроок внутри более крупного основного движения, мы увидим несколько программ.

Метод 1: использование метода подсчета

Это простой и удобный встроенный метод Python, который позволяет нам подсчитывать подстроку внутри основной строки. Его временная сложность равна O(n).

Пример


def count_substr_possible(str, substr):
   count = str.count(substr)
   return count
str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

Выход


Substring count is: 3

Объяснение

Здесь в функцию мы передаем строку и подстроку, которые будут подсчитаны, и присваиваем подстроку функции подсчета строки. Этот метод count() вернет нам общее количество вхождений. В строке «soneduonempaone» подстрока «один» имеет значение 3, поэтому результат будет равен 3, что соответствует общему количеству подстроки внутри строки.

Способ 2: использование регулярных выражений

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

Пример


import re

def count_substr_possible(str, substring):
   count = len(re.findall(substring, str))
   return count
str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

Выход


Substring count is: 3

Объяснение

Здесь, в программе, мы импортируем библиотеку регулярных выражений и, используя последнюю функцию из «re», находим все вхождения подстроки в строку. Функция Findcall() возвращает список совпавших подстрок, и с помощью функции len() мы находим длину списка, которая будет равна общему количеству вхождений подстроки в основную строку.

Способ 3: использование функции Loop и Find()

В этом методе мы перебираем заданную строку и с помощью функции string.find() находим вхождения подстроки.

Пример


def count_substr_possible(str, substr):
   count = 0
   index = 0

   while index != -1:
      index = str.find(substr, index)
      if index != -1:
         count += 1
         index += 1

      return count

str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

Выход


Substring count is: 1

Объяснение

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

Метод 4: использование сравнения и нарезки

Используя этот метод, мы выполняем операции разрезания и сравнения, чтобы подсчитать общее количество вхождений подстроки внутри строки.

Пример


def count_substr_possible(str, substr):
   count = 0
   sub_len = len(substr)

   for i in range(len(str) - sub_len + 1):
      if str[i:i + sub_len] == substr:
         count += 1

      return count

str="soneduonempaone"
substr="one"
print("Substring count is:",count_substr_possible(str, substr))

Выход


Substring count is: 0

Объяснение

Как и в примере с методом 4, мы создадим начальное значение переменной count, равное 0, которое будет вести подсчет общего количества вхождений подстроки. Мы пройдемся по строке, начиная с 0 до длины строки, и будем использовать операцию разрезания подстроки, начиная с текущей позиции i.

Пример


from itertools import combinations

def count_substr_possible(str, substr):
   count = 0
   sub_len = len(substr)

   for length in range(sub_len, len(str) + 1):
      for i in range(len(str) - length + 1):
         sub = ''.join(str[i:i+length])
         if sub == substr:
            count += 1

   return count

str = "soneduonempaone"
substr = "one"


print("Substring count is:",count_substr_possible(str, substr))

Выход


Substring count is: 3

Объяснение

Здесь в программу мы импортировали комбинации из itertools. Наша функция с именем count_substr_possible принимает два параметра: строку и подстроку. Используя два вложенных цикла, мы будем генерировать комбинации символов из строки, внешний цикл будет переходить от длины подстроки к длине большей строки, чтобы генерировать подстроки разной длины. Затем мы сравним подстроку, используя знак равенства. Если они равны, мы увеличим переменную count.

Итак, мы увидели несколько методов, с помощью которых можно найти общее количество подстрок в большей строке. Мы увидели четыре разных метода решения проблемы с использованием языка Python. Среди всех четырех методов метод string.count() имеет очень простой и эффективный подход к решению, тогда как сопоставление выражений регулярных выражений обеспечивает очень эффективный подход к поиску сложных сценариев сопоставления с образцом. Нарезка и сравнение также предоставляют нам очень простой метод подсчета вхождений подстроки. Таким образом, вы можете выбрать любой из методов в зависимости от требований и простоты использования, но представление о различных подходах может помочь в лучшем обучении.

Статьи по данной тематике: