You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么该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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 12:48:03