Python字符串切片未获预期结果,子串出现次数统计遇问题
问题分析与修正
代码中的三个关键错误
- 变量名拼写不一致:定义的子串变量是
sub_string,但切片时写成了substring,实际运行中会触发NameError(你的输出有结果可能是输入时的笔误)。 - 切片结束索引错误:你用
string[i:len(substring)]是从索引i截取到固定位置len(substring)(即3),导致每次截取的片段长度越来越短。正确写法应该是从i开始,截取长度等于子串长度的片段,即string[i:i+len(sub_string)]。 - 循环范围不足:
range(len(string)-len(sub_string))只会生成0、1、2、3这4个起始索引,但实际需要覆盖0到4共5个起始位置,所以要改成range(len(string)-len(sub_string)+1),才能遍历所有可能的子串起始点。
修正后的代码
string = 'ABCDCDC' sub_string = 'CDC' sub_len = len(sub_string) for i in range(len(string) - sub_len + 1): print(string[i:i+sub_len])
输出结果
ABC BCD CDC DCD CDC
如果要统计子串出现次数,只需在循环中添加计数器:
string = 'ABCDCDC' sub_string = 'CDC' sub_len = len(sub_string) count = 0 for i in range(len(string) - sub_len + 1): if string[i:i+sub_len] == sub_string: count +=1 print(count) # 输出:2
内容的提问来源于stack exchange,提问作者foxRun28
相关产品推荐
相关产品推荐

