0

如果我使用替代字符串和子字符串,此代码似乎可以工作,但是只要一个字母连续出现两次,此函数就会翻转,有人可以纠正我吗?我希望它返回 True 或 False,具体取决于子字符串是否出现 'n' 次或更多次!

def nCount(s,substr,n):
    count = 0
    for i in s:
        if len(s[s.index(i):]) >= len(substr):
            print s[s.index(i):(s.index(i)+(len(substr)))]
            if (s[s.index(i):(s.index(i)+(len(substr)))] == substr):

                count += 1
    if (count >= n):
        return True
    return False

print nCount("Mississippi", "si", 3)
4

2 回答 2

4

我看不出这个算法有什么意义。for i in s将循环遍历"Mississippi". s.index(i)将返回每个此类字母的第一个索引。所以,这将是 0, 1, 2, 2, 1, 2, 2, 1, 8, 8, 1。我无法想象你可以用它做任何有用的事情。

当您需要索引和值时,而不是试图从值(这很难或不可能)或从索引中的值(这很容易,但很繁琐)计算索引,只需使用enumerate. 这就是它的用途:

for index, i in enumerate(s):

然后无论你在做什么s.index(i),只要使用index.


当然,用count字符串方法解决这个问题很简单。

def nCount(s, subst, n):
    return s.count(substr) >= n
于 2013-10-30T23:38:19.990 回答
0

使用正则表达式更容易:

import re

def nCount(s, subst, n):
    return len(re.findall(subst, s))>=n

print nCount("Mississippi", "si", 3)    # False
print nCount("Mississippi", "si", 2)    # True
于 2013-10-30T23:31:54.337 回答