为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

拉风的咖菲猫 2019-06-13 17:50:40
具有重叠现象的字符串计数计算给定字符串出现的次数(包括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?还是说蟒蛇有更好的方法?
查看完整描述

3 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

这个强权要更快,因为它可以在C中进行比较:

def occurrences(string, sub):
    count = start = 0
    while True:
        start = string.find(sub, start) + 1
        if start > 0:
            count+=1
        else:
            return count


查看完整回答
反对 回复 2019-06-13
?
慕丝7291255

TA贡献1859条经验 获得超6个赞

>>> 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


查看完整回答
反对 回复 2019-06-13
?
HUWWW

TA贡献1874条经验 获得超12个赞

您也可以尝试使用新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


查看完整回答
反对 回复 2019-06-13
  • 3 回答
  • 0 关注
  • 591 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信