количество строк с перекрывающимися вхождениями - PullRequest
47 голосов
/ 04 июня 2010

Какой лучший способ подсчитать количество вхождений данной строки, включая перекрытие в python? это самый очевидный способ:

def function(string, str_to_search_for):
      count = 0
      for x in xrange(len(string) - len(str_to_search_for) + 1):
           if string[x:x+len(str_to_search_for)] == str_to_search_for:
                count += 1
      return count


function('1011101111','11')
returns 5

или есть лучший способ в питоне?

Ответы [ 22 ]

0 голосов
/ 30 июня 2019

Простой способ подсчета вхождения подстроки - использовать count():

>>> s = 'bobob'
>>> s.count('bob')
1

Вы можете использовать replace (), чтобы найти перекрывающиеся строки, если вы знаете, какая часть будет перекрываться:

>>> s = 'bobob'
>>> s.replace('b', 'bb').count('bob')
2

Обратите внимание, что помимо статичности существуют и другие ограничения:

>>> s = 'aaa'
>>> count('aa') # there must be two occurrences
1 
>>> s.replace('a', 'aa').count('aa')
3
0 голосов
/ 20 сентября 2012

Если вы хотите посчитать количество перестановок длины 5 (отрегулируйте, если требуется для разных длин):

def MerCount(s):
  for i in xrange(len(s)-4):
    d[s[i:i+5]] += 1
return d
...