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

Python如何将一维列表按窗口大小5切分为滑动式列表的列表

固定步长滑动窗口切分列表实现

已知条件

  • 原始一维列表定义:
mylist = [1, 2, 7, 11, 8, 55, 89, 1, 3, 8]
  • 切分规则:窗口固定包含5个连续元素,每次窗口整体向后滑动1个位置,最终输出嵌套的列表结构
  • 期望输出:
[[1, 2, 7, 11, 8], [2, 7, 11, 8, 55], [7, 11, 8, 55, 89],[11, 8, 55, 89, 1], [8, 55, 89, 1, 3], [55, 89, 1, 3, 8]]

原有代码问题

你之前编写的代码存在两个核心问题,无法得到目标结果:

  • 初始索引列表indices = [0,1,2]长度为3,和要求的窗口大小5不匹配
  • Python的for循环在启动时就会固定遍历的迭代对象,循环内部重新给indices赋值不会修改当前正在遍历的序列,逻辑不成立。

正确实现方案

方案1:直观循环实现

逻辑清晰,容易理解,适合新手:

window_size = 5
result = []
# 遍历所有合法的窗口起始索引
for start_idx in range(len(mylist) - window_size + 1):
    # 利用列表切片切取当前窗口的元素,追加到结果中
    result.append(mylist[start_idx : start_idx + window_size])

方案2:列表推导式精简实现

代码更简洁,执行效率和循环写法一致:

window_size = 5
result = [mylist[i:i+window_size] for i in range(len(mylist) - window_size + 1)]

原理说明

Python列表切片为左闭右开规则,mylist[i:i+window_size]会刚好取到索引从i到i+window_size-1的共window_size个元素。
起始索引的取值上限为len(mylist) - window_size,保证切片不会超出列表边界:示例列表长度为10,窗口大小为5,因此起始索引可取0、1、2、3、4、5共6个值,刚好对应期望输出里的6个子列表。
注意:计算range的上界时必须加1,因为range本身是左闭右开区间,不加1会丢失最后一个合法窗口。

内容的提问来源于stack exchange,提问作者Andre

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:39:20