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

不使用Python内置切片语法如何实现任意维度列表的高效多维切片?

任意维度列表通用切片实现

实现思路

采用递归方案适配任意维度的切片需求,每一层递归处理一个维度的索引遍历,全程仅通过下标逐个访问元素,不使用Python专属的切片语法,核心逻辑:

  • 传入已知的列表形状shape,每层递归定位到当前处理的维度下标
  • 按当前维度的切片参数(起始、终止、步长)遍历所有有效索引
  • 若当前为最后一维,直接将对应索引的元素加入结果
  • 若不是最后一维,递归处理下一个维度的切片,将子递归返回的结果加入当前层结果
  • 自动处理边界异常:起始值小于0时取0,终止值大于当前维度长度时取当前维度的最大长度,步长最小为1

实现代码

def multi_dim_slice(L, shape, slices):
    dim_count = len(shape)
    # 递归辅助函数:当前处理的维度dim,当前定位到的子列表sub_L
    def helper(dim, sub_L):
        start, end, step = slices[dim]
        # 边界修正
        start = max(start, 0)
        end = min(end, shape[dim])
        step = max(step, 1)
        res = []
        # 逐个遍历当前维度的有效索引
        i = start
        while i < end:
            current = sub_L[i]
            if dim == dim_count - 1:
                # 最后一维,直接加元素
                res.append(current)
            else:
                # 非最后一维,递归处理下一层
                res.append(helper(dim + 1, current))
            i += step
        return res
    return helper(0, L)

# 示例测试
L = [[[1, 2, 3],
      [4, 5, 6]],
     [[7, 8, 9],
      [10, 11, 12]]]
shape = [2, 2, 3]
# 调整切片参数匹配示例输出:第一维取0、1,第二维取0,第三维取0、2
slices = [(0, 2, 1),
          (0, 1, 1),
          (0, 3, 2)]
result = multi_dim_slice(L, shape, slices)
print(result)
# 输出:[[[1, 3]], [[7, 9]]]

方案说明

  • 通用性:支持任意数量维度的列表切片,仅需要提前传入对应维度的shape参数即可
  • 效率:时间复杂度为O(N),N为最终返回结果的元素总数,每个元素仅访问一次,无额外冗余计算
  • 普适性:未使用任何Python专属特性,核心逻辑可以直接迁移到其他编程语言实现

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 02:57:03