为什么该Python递归滑动窗口函数返回None而非预期的列表?
问题原因
你的递归函数缺少递归调用层的返回值传递,Python 函数默认无显式 return 时返回 None,具体问题点如下:
- 你仅在递归终止分支(
len(seq) < size)写了return l,这个返回值只会回传给直接调用终止分支的上一层递归函数 - 你的
else分支调用sliding_window_rec(seq, size, step, l)后没有写 return 语句,这一层函数执行完会默认返回None,最终最外层调用拿到的就是逐层传递上来的None - 你在递归内部加
print(l)能看到正确结果,是因为你传入的列表l是可变对象,所有递归层修改的都是同一个列表实例,即使没有返回值,列表本身的内容已经被修改了,但返回值和对象内容是独立的两个逻辑。
修复代码
只需要在 else 分支的递归调用前添加 return 语句,把递归结果逐层向上传递即可:
def sliding_window(seq, size, step): l = [] return sliding_window_rec(seq, size, step, l) def sliding_window_rec(seq, size, step, l): if len(seq) < size: return l else: l.append(seq[:size]) seq = seq[step:] return sliding_window_rec(seq, size, step, l)
内容的提问来源于stack exchange,提问作者sampledrift
相关产品推荐
相关产品推荐

