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
相关产品推荐
相关产品推荐

