如果我使用替代字符串和子字符串,此代码似乎有效,但只要一个字母连续出现两次此函数翻转,有人可以纠正我吗? 我希望它返回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)
答案 0 :(得分:4)
我看不出这种算法有任何意义。 for i in s
将遍历"Mississippi"
中的所有字母。 s.index(i)
将返回每个此类字母的第一个索引。所以,那将是0,1,2,2,1,2,2,1,8,8,1。我无法想象你能做些什么有用的事。
当您需要索引和值时,而不是尝试从值(难以或不可能)或索引中的值计算索引(这很容易,但很乏味),只需使用{{3} }。这就是它的用途:
for index, i in enumerate(s):
然后,您正在进行的任何地方s.index(i)
,只需使用index
。
当然,使用字符串enumerate
方法解决这个问题很简单。
def nCount(s, subst, n):
return s.count(substr) >= n
答案 1 :(得分: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