Количество раз, когда подстрока встречается в строке - PullRequest
1 голос
/ 04 апреля 2020

Ниже мой код:

def count_substring(string, sub_string):
    counter = 0
    for x in range(0,len(string)):
        if string[x]+string[x+1]+string[x+2] == sub_string:
            counter +=1
    return counter

Когда я запускаю код, он выдает ошибку - " IndexError: строковый индекс выходит за пределы диапазона " Пожалуйста, помогите Я понимаю, что не так с моим кодом, а также с решением. Я новичок в Python. Пожалуйста, объясни мне это, как будто мне 5.

Ответы [ 3 ]

1 голос
/ 04 апреля 2020

Разве вы не можете просто использовать str.count для неперекрывающихся матчей:

str.count(substring, [start_index], [end_index])

full_str = 'Test for substring, check for word check'
sub_str = 'check'
print(full_str.count(sub_str))

Возвращает 2


Если у вас совпадают совпадения с вашей подстрокой, вы можете попробовать re.findall с положительным прогнозом:

import re
full_str = 'bobob'
sub_str = 'bob'
print(len(re.findall('(?='+sub_str+')',full_str)))

Если вы получили новый модуль regex.findall и хотите считать поэтому попробуйте использовать параметр overlapping в re.findall и установить его на true:

import regex as re
full_str = 'bobob'
sub_str = 'bob'
print(len(re.findall(sub_str, full_str, overlapped=True)))

Обе опции вернутся: 2

0 голосов
/ 04 апреля 2020

Строка имеет встроенный метод count для этой цели.

string = 'This is the way to do it.'
string.count('is')

Output: 2
0 голосов
/ 04 апреля 2020

Не могли бы вы просто использовать count? Он использует намного меньше кода. Смотрите ответ JvdV. Кроме того, кстати, вот как я могу это сделать:

def count_substring(string, substring)
    print(string.count(substring))

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

print(string.count(substring)) # by the way you have to define string and substring first

Если вы хотите включить перекрывающиеся строки, сделайте следующее:

def count(string, substring):
    string_size = len(string)
    substring_size = len(substring)
    count = 0
    for i in xrange(0, string_size-substring_size+1):
        if string[ i:i + substring_size] == substring:
            count += 1
    return count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...