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

如何获取首尾相连的循环列表中指定长度的所有子数组?

从循环列表中提取指定长度的所有子数组

核心思路

循环列表的本质是首尾相连,提取子数组时,当从某个起始位置取元素到数组末尾后,需要从数组开头继续补全剩余元素。具体逻辑如下:

  1. 明确原数组长度n和目标子数组长度k,循环数组中共有n个长度为k的子数组(每个元素均可作为起始点);
  2. 对每个起始索引i(从0到n-1),通过取余运算(i+j) % n获取循环后的有效索引(j为子数组内的偏移量,范围是0到k-1);
  3. 按索引依次取出元素,组成对应子数组。

示例演示

给定数组:Array = [0,1,1,0,0,1],目标子数组长度k=3:

  • 起始索引0:取索引0、1、2 → [0,1,1]
  • 起始索引1:取索引1、2、3 → [1,1,0]
  • 起始索引2:取索引2、3、4 → [1,0,0]
  • 起始索引3:取索引3、4、5 → [0,0,1]
  • 起始索引4:取索引4、5、0 → [0,1,0](到末尾后从开头补)
  • 起始索引5:取索引5、0、1 → [1,0,1](到末尾后从开头补)

最终结果:[[0,1,1], [1,1,0], [1,0,0], [0,0,1], [0,1,0], [1,0,1]]

代码实现(Python)

基础写法

arr = [0, 1, 1, 0, 0, 1]
k = 3
n = len(arr)
subarrays = []

for start in range(n):
    sub = []
    for offset in range(k):
        # 取余运算实现循环索引
        idx = (start + offset) % n
        sub.append(arr[idx])
    subarrays.append(sub)

print(subarrays)

简洁写法(列表推导式)

arr = [0, 1, 1, 0, 0, 1]
k = 3
n = len(arr)

# 先生成所有元素的平铺列表,再按k长度拆分
flattened = [arr[(i+j) % n] for i in range(n) for j in range(k)]
subarrays = [flattened[i*k : (i+1)*k] for i in range(n)]

print(subarrays)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 19:17:29