具有重叠现象的字符串计数

具有重叠现象的字符串计数

计算给定字符串出现的次数(包括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

?

还是说蟒蛇有更好的方法?


拉风的咖菲猫
浏览 592回答 3
3回答

慕容708150

这个强权要更快,因为它可以在C中进行比较:def occurrences(string, sub):     count = start = 0     while True:         start = string.find(sub, start) + 1         if start > 0:             count+=1         else:             return count

慕丝7291255

>>> import re>>> text = '1011101111'>>> len(re.findall('(?=11)', text))5如果您不想将整个匹配列表加载到内存中,这将不会是一个问题!如果你真的愿意的话,你可以这样做:>>> sum(1 for _ in re.finditer('(?=11)', text))5作为一种功能(re.escape确保子字符串不干扰regex):>>> def occurrences(text, sub):         return len(re.findall('(?={0})'.format(re.escape(sub)), text))>>> occurrences(text, '11')5

HUWWW

您也可以尝试使用新Python regex模块,它支持重叠匹配。import regex as redef count_overlapping(text, search_for):     return len(re.findall(search_for, text, overlapped=True))count_overlapping('1011101111','11')  # 5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python