Python中如何将一维数组拆分为连续相邻的二元子数组?
解决滑动窗口式数组分割问题
看来你需要的是滑动窗口式的重叠分割,而你现有的函数是做无重叠的固定块分割,这就是结果不符合预期的原因啦!
问题根源
你写的split函数逻辑是每次从数组头部切走size个元素,剩下的部分继续切割——这种方式得到的是完全不重叠的块,比如切完[1,2]后直接处理[3,4,5,6],自然得不到相邻元素组成的子数组。
解决方案:滑动窗口实现
我们需要遍历数组,每次取一个长度为size的连续窗口,并且窗口每次只向右移动1个元素。这里有两种实用的实现方式:
1. 手动循环实现(清晰易懂)
def sliding_split(arr, window_size): result = [] # 遍历到倒数第window_size个元素就停止,避免索引越界 for i in range(len(arr) - window_size + 1): # 取从i开始的window_size个连续元素 result.append(arr[i:i+window_size]) return result # 测试验证 x = [1,2,3,4,5,6] print(sliding_split(x, 2)) # 输出: [[1, 2], [2, 3], [3, 4], [4, 5], [5, 6]]
2. 列表推导式(简洁高效)
如果追求代码简洁,用列表推导式一行就能搞定:
x = [1,2,3,4,5,6] window_size = 2 result = [x[i:i+window_size] for i in range(len(x)-window_size+1)] print(result) # 同样得到目标结果
这样就能完美生成你想要的相邻元素组成的子数组啦~
内容的提问来源于stack exchange,提问作者Beatriz Orozco
相关产品推荐
相关产品推荐

