Python for loop实现3位字符串子串计数函数始终返回0的问题排查
代码问题定位与修正方案
核心问题梳理
- 缺失返回语句,导致无法获取计算结果
现有代码完成count值的累加后,没有通过return count将计数结果输出,Python默认会给无返回语句的函数返回None,很容易被误判为返回0的异常状态。 - 硬编码固定切片长度,未适配传入子串的实际长度
判断逻辑里写死了从i位置取3个字符和子串做对比,完全没有参考传入的sub_string的实际长度。只要传入的子串长度不是3位,哪怕位置完全匹配,切片取出的内容和目标子串长度都不一致,永远匹配不上,计数就会一直停在0。 - 循环范围存在冗余遍历
现有循环会覆盖原字符串的所有索引位置,当索引超过原字符串长度 - 子串长度的阈值时,从该位置开始的切片根本凑不够完整的子串长度,这些位置的判断属于无效计算,不会影响结果但会增加不必要的运行开销。
修正后的可运行代码
def count_substring(string, sub_string): count = 0 sub_length = len(sub_string) # 仅遍历能完整放下目标子串的索引范围 for i in range(len(string) - sub_length + 1): if string[i:i+sub_length] == sub_string: count += 1 return count
实际测试:传入原字符串
"122122"、目标子串"122"时,函数可正确返回2次的统计结果,同时兼容任意长度的子串统计需求。
内容的提问来源于stack exchange,提问作者Ryan
相关产品推荐
相关产品推荐

