Python滑动窗口遇指定字符串重启的代码问题排查
滑动窗口逻辑错误分析与修正
需求说明
给定字符串列表,以窗口大小n做滑动窗口处理:当窗口中出现特定字符串'Abel'且该字符串不在窗口首位时,立即重启滑动窗口(即从'Abel'的位置开始新的窗口)。
原代码与问题
原代码
i = 0 a = ['Abel', 'Bea', 'Clare', 'Abel', 'Ben', 'Constance', 'Dave', 'Emmet', 'Abel', 'Bice', 'Carol', 'Dennis'] n=3 while i in range(len(a)-n+1): print('Window :', a[i:i+n]) i += 1 if a[i] == 'Abel': print() continue
当前输出
Window : ['Abel', 'Bea', 'Clare'] Window : ['Bea', 'Clare', 'Abel'] Window : ['Clare', 'Abel', 'Ben'] Window : ['Abel', 'Ben', 'Constance'] Window : ['Ben', 'Constance', 'Dave'] Window : ['Constance', 'Dave', 'Emmet'] Window : ['Dave', 'Emmet', 'Abel'] Window : ['Emmet', 'Abel', 'Bice'] Window : ['Abel', 'Bice', 'Carol'] Window : ['Bice', 'Carol', 'Dennis']
期望输出
#Expected result Window : ['Abel' , 'Bea', 'Clare'] Window : ['Abel', 'Ben', 'Constance'] Window : ['Ben', 'Constance', 'Dave'] Window : ['Constance', 'Dave', 'Emmet'] Window : ['Abel', 'Bice', 'Carol'] Window : ['Bice', 'Carol', 'Dennis']
代码存在的核心问题
触发重启的条件完全错误
原代码仅检查a[i] == 'Abel',这是窗口滑动后的下一个起始位置元素,而非当前窗口内是否存在非首位的'Abel'。比如当前窗口是['Bea', 'Clare', 'Abel']时,代码根本没检测到这个窗口里的'Abel',导致错误地继续滑动到下一个窗口。重启窗口的操作逻辑错误
原代码用continue仅跳过一次循环,但没有将窗口起始位置i重置到'Abel'的索引位置,无法实现“从'Abel'处重启窗口”的需求。循环条件存在隐患
while i in range(len(a)-n+1)中,range是初始生成的固定序列,当i被重置后,若超出初始range的范围会直接终止循环,逻辑不够严谨。
修正后的代码
i = 0 a = ['Abel', 'Bea', 'Clare', 'Abel', 'Ben', 'Constance', 'Dave', 'Emmet', 'Abel', 'Bice', 'Carol', 'Dennis'] n = 3 max_i = len(a) - n while i <= max_i: window = a[i:i+n] print('Window :', window) # 检查窗口中是否存在非首位的Abel if 'Abel' in window[1:]: # 找到Abel的索引,将i设置为该索引以重启窗口 abel_idx = window.index('Abel') + i i = abel_idx print() else: i += 1
逻辑解释
- 每次先获取当前窗口,打印后检查窗口的
[1:]部分(即非首位位置)是否存在'Abel'; - 若存在,找到
'Abel'在原列表中的索引,将i设置为该索引,实现从'Abel'处重启窗口,并打印空行分隔; - 若不存在,正常滑动窗口(
i += 1); - 循环条件改为
i <= max_i,避免range固定序列带来的问题,更严谨。
内容的提问来源于stack exchange,提问作者user19023586
相关产品推荐
相关产品推荐

