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

Python实现列表循环移动窗口输出 首列按i*8生成问题求解

问题说明

给定初始列表 [1, 2, 3, 4, 5, 6, 7],需要生成高度为5行的循环滑动窗口输出,规则如下:

  • 窗口每次向下滑动1个元素,滑动到列表末尾后回到列表头部循环取值
  • 每行第一列数值固定为窗口内行偏移量i(取值范围0~4)乘以8,即i*8,因此每个窗口的第一列固定为0、8、16、24、32
  • 目标输出示例:
0  1
8  2
16 3
24 4
32 5

0  2
8  3
16 4
24 5
32 6

0  3
8  4
16 5
24 6
32 7

0  1
8  2
16 3
24 4
32 5
原代码问题分析

原实现存在三个核心错误:

  1. 第一列数值计算逻辑错误:用全局索引取模5计算位置,导致窗口滑动后第一列没有从0开始重置,和需求要求的「窗口内行偏移从0开始」规则冲突
  2. 列表取值没有做循环取模处理,索引超出列表长度后无法正确回到头部取值
  3. 全局变量lines的重置逻辑混乱,无法正确控制窗口滑动的起始位置,且循环次数不足,缺少最后一个回到头部的窗口输出
正确实现方案

方案1:基础列表实现

不需要全局变量,直接通过模运算处理循环索引,逻辑简单直接:

def generate_sliding_window(lst, window_h=5, col_step=8):
    lst_len = len(lst)
    # 按示例生成4个窗口,可根据需要调整窗口总数
    win_start_list = [0, 1, 2, 0]
    for start in win_start_list:
        for offset in range(window_h):
            # 模运算实现列表循环取值
            val = lst[(start + offset) % lst_len]
            print(f"{offset * col_step:<2d} {val}")
        # 窗口之间打印空行分隔
        print()

if __name__ == "__main__":
    ll = [1, 2, 3, 4, 5, 6, 7]
    generate_sliding_window(ll)

如果需要无限连续滑动,只需要把win_start_list替换为自增的起始索引,每次对lst_len取模即可。

方案2:用deque实现

可以使用collections.deque完成该需求,deque原生支持旋转操作,更贴合循环滑动的场景:

from collections import deque

def generate_sliding_window_deque(lst, window_h=5, col_step=8):
    dq = deque(lst)
    # 按示例生成4个窗口
    for win_idx in range(4):
        # 取当前队列前window_h个元素作为当前窗口内容
        current_win = list(dq)[:window_h]
        for offset, val in enumerate(current_win):
            print(f"{offset * col_step:<2d} {val}")
        print()
        # 左旋转1位:最左侧元素移到队列末尾,实现窗口滑动1位
        dq.rotate(-1)
        # 匹配示例第四个窗口重置到初始状态的逻辑,可根据实际需求删除
        if win_idx == 2:
            dq = deque(lst)

if __name__ == "__main__":
    ll = [1, 2, 3, 4, 5, 6, 7]
    generate_sliding_window_deque(ll)

如果不需要示例中第四个窗口重置到初始状态的特殊逻辑,删除代码中判断win_idx==2重置队列的部分即可,代码会自动按顺序循环生成所有滑动窗口。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 06:24:15