Python:计算字符串中重叠的子字符串

Python:计算字符串中重叠的子字符串,python,python-2.7,pycharm,Python,Python 2.7,Pycharm,假设我有string='hannahannahskdjhannahannah'并且我想计算字符串hannah出现的次数,我不能简单地使用count,因为在每种情况下只计算一次子字符串 即 我希望返回4,但在pyCharm中使用string运行时只返回2 但是如果我是你,我会使用string.find()方法,它接受你要查找的字符串和开始查找的位置,并结合while循环,以某种方式使用find方法的结果作为条件 理论上,这会给你答案。你可以使用一个运行索引来获取下一个事件: bla = 'hann

假设我有
string='hannahannahskdjhannahannah'
并且我想计算字符串
hannah
出现的次数,我不能简单地使用count,因为在每种情况下只计算一次子字符串


我希望返回
4
,但在pyCharm中使用
string运行时只返回
2

但是如果我是你,我会使用string.find()方法,它接受你要查找的字符串和开始查找的位置,并结合while循环,以某种方式使用find方法的结果作为条件


理论上,这会给你答案。

你可以使用一个运行索引来获取下一个事件:

bla = 'hannahannahskdjhannahannah'
cnt = 0
idx = 0
while True:
    idx = bla.find('hannah', idx)
    if idx >= 0:
        cnt += 1
        idx += 1
    else:
        break
print(cnt)
给出:

>> 4

像这样的怎么样

>>> d = {}
>>> string = 'hannahannahskdjhannahannah'
>>> for i in xrange(0,len(string)-len('hannah')+1):
...     if string[i:i+len('hannah')] == 'hannah':
...             d['hannah'] = d.get('hannah',0)+1
... 
>>> d
{'hannah': 4}
>>> 

这将在
字符串中搜索
hannah
,方法是将字符串从索引0一直迭代拼接到字符串长度减去
hannah
的长度。如果要同时计算非连续子字符串,这是一种方法

'''
s: main string
sub: sub-string
count: number of sub-strings found
p: use the found sub-string's index in p for finding the next occurrence of next sub-string
'''
count=0
p=0
for letter in s:
    p=s.find(sub,p)   
    if(p!=-1):
        count+=1
        p+=1
print count
def subword(lookup,whole):
    if len(whole)<len(lookup):
          return 0
    if lookup==whole:
          return 1
    if lookup=='':
          return 1
    if lookup[0]==whole[0]:
         return subword(lookup[1:],whole[1:])+subword(lookup,whole[1:])
    return subword(lookup,whole[1:])
def子字(查找,全部):
如果len(整个)
def Count_重叠(字符串、子字符串):
计数=0
开始=0
启动时
要么给出一个完整的答案,要么发表评论。Ricky同意,一点帮助都没有。我下次会发表评论,但仍然不认为为他人编写代码是个好主意,否则没人会学到任何东西。也就是说,被接受的答案实际上是我所说的。是的,因为Stackoverflow不是一种教学资源,它是一个问答。有时一个人只需要一条鱼,却不想在水中爬到腰部去试图弄清楚鱼竿是如何工作的。可能的复制品可能的复制品这是完美的Ricky!非常感谢你的帮助。关于运行索引方法有没有更具体的文档?据我所知没有。只是常识。你能为你的代码提供一个更详细的解释吗?这是如何解决问题的?
def Count_overlap(string, substring):   
    count = 0
    start = 0
 
    while start < len(string):
        pos = string.find(substring, start)
  
        if pos != -1:
            start = pos + 1
            count += 1
        else:
            break
    return count
string = "hannahannahskdjhannahannah"
print(Count_overlap(string, "hannah"))