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

Sac*_*ori 2 python string iteration sequence python-3.x

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

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"))
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*sem 5

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

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

非重叠(count_seqence('aaaa', 'aa')2

对于非重叠计数,我们可以使用str.count

def count_seqence(text, seq):
    return text.count(seq)
Run Code Online (Sandbox Code Playgroud)

在这种情况下,定义特定功能当然是无用的。请注意,以上只会计算非重叠匹配项。例如,当您计算时'aa''aaaa'您将得到2,而不是3

重叠(count_seqence('aaaa', 'aa')3

对于重叠,我们需要执行 a 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
Run Code Online (Sandbox Code Playgroud)

因此idx,我们有一个存储新匹配出现的索引的 ,并且每次idx大于或等于0(我们找到匹配)时,我们增加cnt,并更改idx下一个匹配。