在python中,如何计算序列在给定字符串中出现的次数?

在python中,如何计算序列在给定字符串中出现的次数?,python,python-3.x,string,iteration,sequence,Python,Python 3.x,String,Iteration,Sequence,我试图计算序列在给定字符串中出现的次数 def count_seqence(str, seq): count = 0 if seq in str: count += 1 return count print(count_seqence("the quick brown fox jumps over the lazy dog","he")) 但这只运行一次,不循环,我如何循环和计数出现多少次,因为我知道循环将针对每个字符而不是一个seq,这让我感到困惑。对

我试图计算序列在给定字符串中出现的次数

def count_seqence(str, seq):
    count = 0
    if seq in str:
        count += 1
    return count
print(count_seqence("the quick brown fox jumps over the lazy dog","he"))

但这只运行一次,不循环,我如何循环和计数出现多少次,因为我知道循环将针对每个字符而不是一个seq,这让我感到困惑。

对字符串使用
count
,它将返回找到参数值的时间
seq

def count_seqence(str, seq):
    return str.count(seq)

print count_seqence("kjdsflsdnf lskmfldsknffsdlkfnsldkmf", "ds")
输出

2

使用
string.count
方法。检查一下

例如:

x = "wip wip I'm a sheep wip"
print(x.count("wip"))

因为你使用了一个
if
,而不是在循环中,这意味着要么条件是
True
,因此你增加了
count
,要么是
False
,在这种情况下你不执行主体

如果你想数数,你需要一些“循环”机制。这不必是明确的,例如,中的
也隐藏了一个循环。但这只会导致
True
False

不重叠(
count_sequence('aaaa','aa')
2
) 对于非重叠计数,我们可以使用
str.count

def count_seqence(text, seq):
    return text.count(seq)
在这种情况下,定义一个特定的函数当然是毫无用处的。请注意,以上内容仅统计非重叠匹配。例如,当您在
'aaaa'
中计算
'aa'
时,您将得到
2
,而不是
3

重叠(
count_sequence('aaaa','aa')
3
) 对于重叠,我们需要执行
str.find
,并更新“搜索窗口”,直到不再找到匹配项,如:

def count_seqence(text, seq):
    cnt = 0
    idx = text.find(seq)
    while idx >= 0:
        cnt += 1
        idx = text.find(seq, idx+1)
    return cnt

因此,我们有一个
idx
,它存储发生新匹配的索引,每次
idx
大于或等于
0
(我们找到了一个匹配项),我们都会增加
cnt
,并将
idx
更改为下一个匹配项。

使用字符串计数,它将返回找到参数值seq的时间

def计数顺序(str,顺序): 返回str.count(seq)


打印计数(kjdsflsdnf

mystr.count('he'))
?这太令人尴尬了,因为只有一行代码,我有三个小时的时间,尝试使用if和elif语句,感谢老兄。其他答案更完整,包括序列重叠的情况。@JonathanGagne:你能提供这个惯例的参考吗?此外,一些复杂的解决方案往往更有效。例如示例:计算重叠实例的切片解决方案确实很容易理解,但会缩放O(m n),而Knuth-Morris-Pratt算法更难理解,但会缩放O(m+n)。@JonathanGagne:问题中哪里有关于重叠计数的详细信息?:)但是,是的,我想要更多,因为现在,你仍然没有分享一个标准答案。不知何故,你不仅给出了帕斯-普托答案,还提供了帕斯-普托链接:)也许我应该更具体一点,你能提供一个标准链接,指定最短的答案是最好的吗?