首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python中字符串中子字符串的重叠计数

Python中字符串中子字符串的重叠计数
EN

Stack Overflow用户
提问于 2015-08-29 14:12:25
回答 8查看 2.5K关注 0票数 3

我想找出一个字符串中一个子串的所有计数(重叠和非重叠)。我找到了两个答案,一个是使用正则表达式,这不是我的本意,另一个比我需要的效率低得多。我需要像这样的东西:

代码语言:javascript
复制
'ababaa'.count('aba') == 2

str.count()只计算简单的子字符串。我该怎么办?

EN

回答 8

Stack Overflow用户

回答已采纳

发布于 2015-08-29 14:29:42

代码语言:javascript
复制
def sliding(a, n):
    return (a[i:i+n] for i in xrange(len(a) - n + 1))

def substring_count(a, b):
    return sum(s == b for s in sliding(a, len(b)))

assert list(sliding('abcde', 3)) == ['abc', 'bcd', 'cde']    
assert substring_count('ababaa', 'aba') == 2
票数 4
EN

Stack Overflow用户

发布于 2015-08-29 14:27:17

这样做有效吗?

代码语言:javascript
复制
def count(string, substring):
    n = len(substring)
    cnt = 0
    for i in range(len(string) - n):
        if string[i:i+n] == substring:
            cnt += 1
    return cnt

print count('ababaa', 'aba') # 2

我不知道是否有更有效的解决方案,但这应该是可行的。

票数 1
EN

Stack Overflow用户

发布于 2015-08-29 14:27:34

在这里,使用re.finditer()是实现您想要的最好方法。

代码语言:javascript
复制
import re 

def get_substring_count(s, sub_s):
    return sum(1 for m in re.finditer('(?=%s)' % sub_s, s))

get_substring_count('ababaa', 'aba')
# 2 as response
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32283255

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档