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

时间:2014-09-08 10:08:57

标签: python python-2.7 pycharm

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

IE中。

我希望返回4,但只有在2

的pyCharm中运行时才会返回string.count('hannah')

6 个答案:

答案 0 :(得分:8)

您可以使用正在运行的索引来获取下一次出现:

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

答案 1 :(得分:2)

这样的事情怎么样?

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

通过迭代地将索引从索引0拼接到字符串的长度减去string

的长度,在hannah中搜索hannah {{1}}

答案 2 :(得分:1)

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

答案 3 :(得分:0)

如果你想计算非连续子串,这就是这样做的方法

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:])

答案 4 :(得分:0)

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

答案 5 :(得分:-3)

不要为你回答这个问题,因为它很简单,可以自己解决。

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

理论上应该给你答案。