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() имеет очень простой и эффективный подход к решению, тогда как сопоставление выражений регулярных выражений обеспечивает очень эффективный подход к поиску сложных сценариев сопоставления с образцом. Нарезка и сравнение также предоставляют нам очень простой метод подсчета вхождений подстроки. Таким образом, вы можете выбрать любой из методов в зависимости от требований и простоты использования, но представление о различных подходах может помочь в лучшем обучении.