基于固定窗口大小与数据交集的数组填充实现
实现固定窗口滑动生成指定长度数组的方案
我来帮你梳理这个需求的实现思路和代码方案,其实核心就是固定重叠长度的滑动窗口逻辑,咱们一步步拆解:
先明确核心规则
从你的目标输出反推,关键逻辑是:
- 每行数组固定长度为10
- 每次滑动时,保留上一行的最后3个元素(因为窗口大小是7,
10-7=3,这样新添加7个元素后刚好凑满10个) - 当后续没有足够的原始数字时,用
0填充空缺位置 - 最终生成5行结果
Python代码实现
下面是直接可用的代码,运行后就能得到你要的目标数组:
# 初始化1到30的序列 initial_numbers = list(range(1, 31)) # 配置参数 row_length = 10 # 每行固定长度 window_size = 7 # 每次新增的窗口元素数 target_rows = 5 # 目标行数 overlap = row_length - window_size # 每次保留的交集长度(这里是3) result_rows = [] current_start_idx = 0 for _ in range(target_rows): # 计算当前行的元素范围,左闭右开 end_idx = current_start_idx + row_length # 从原始序列取元素,不足的用0补全 current_row = initial_numbers[current_start_idx:end_idx] + [0] * max(0, row_length - len(initial_numbers[current_start_idx:end_idx])) result_rows.append(current_row) # 更新下一行的起始索引:每次跳过窗口大小的长度(因为重叠部分已经保留) current_start_idx += window_size # 打印结果(转成空格分隔的字符串) for row in result_rows: print(' '.join(map(str, row)))
运行结果
执行代码后会输出:
1 2 3 4 5 6 7 8 9 10 8 9 10 11 12 13 14 15 16 17 15 16 17 18 19 20 21 22 23 24 22 23 24 25 26 27 28 29 30 0 29 30 0 0 0 0 0 0 0 0
逻辑解释
- 初始序列:用
range(1,31)生成1到30的连续整数列表 - 滑动规则:每次起始索引增加
window_size=7,这样下一行的起始位置刚好是上一行第(row_length - overlap)=7个元素的位置,自然保留了最后3个元素作为交集 - 补0处理:当原始序列的剩余元素不足10个时,用
[0] * 缺失数量来填充,保证每行长度固定为10 - 循环控制:循环5次生成目标行数的结果
如果需要其他编程语言的实现,核心逻辑也是一样的:控制起始位置、截取元素、补0、循环生成即可。
内容的提问来源于stack exchange,提问作者elenaby
相关产品推荐
相关产品推荐

