You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中count()函数工作原理解析:为何"banana"统计"ana"结果为1?

Python中str.count()的行为解释:为什么"banana".count("ana")返回1?

现象解释

你觉得"banana"里应该有2个"ana",是把重叠的匹配也算进去了——比如从索引1开始的a n a,和从索引3开始的a n a。但count()不会统计这种重叠的情况:第一次匹配到索引1-3的"ana"后,下一次搜索会直接跳到匹配结束位置的下一个索引(也就是4),而不是从匹配起始位置的下一个索引(2)开始。从索引4开始的话,剩下的字符只有n和a,长度不够3,自然找不到第二个"ana",所以最终返回1。

str.count()的工作机制

Python字符串的count()方法用于统计子串在原字符串中的出现次数,核心规则是非重叠匹配,具体逻辑如下:

  • 接受三个参数:sub(要查找的子串)、start(搜索起始索引,默认0)、end(搜索结束索引,默认字符串长度)
  • 从start位置开始,逐个查找与sub完全匹配的子串
  • 每找到一个匹配的子串,下一次搜索会从当前匹配子串的结束位置的下一个索引开始,而非匹配起始位置的下一个索引
  • 直到搜索到end位置为止,返回累计的匹配次数

举个更直观的例子:

s = "aaaaa"
print(s.count("aa"))  # 输出2,匹配0-1和2-3,剩下的索引4不够长度2

如果需要统计重叠的匹配,得自己实现逻辑,比如:

def count_overlap(s, sub):
    count = 0
    sub_len = len(sub)
    for i in range(len(s) - sub_len + 1):
        if s[i:i+sub_len] == sub:
            count += 1
    return count

st = "banana"
print(count_overlap(st, "ana"))  # 输出2

内容的提问来源于stack exchange,提问作者Dark Knight

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:25:21