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

Python3 DynamicArray切片方法返回数组大小错误问题排查

DynamicArray.slice 方法返回数组大小不符合预期问题修复

问题背景

需要实现DynamicArray类的slice方法:从原动态数组的指定start_index索引位置开始,截取共size个元素,返回包含这些截取元素的全新DynamicArray实例。当前编写的代码无法通过测试,报错提示返回的动态数组大小不符合预期,原有实现代码如下:

def slice(self, start_index: int, size: int) -> "DynamicArray":  
    slice_array = DynamicArray()
    if(start_index < 0) or (start_index >= self._size):
        raise DynamicArrayException
    elif(size > self._size) or (size + start_index >= self._size) or (size < 0):
        raise DynamicArrayException

    #resize to fit the number of elements
    for i in range(start_index, size+start_index):
        slice_array.append(self._data[i])
    return DynamicArray()

原有实现的设计逻辑:

  • 先做参数合法性校验:start_index小于0或大于等于原数组长度self._size时抛出DynamicArrayException;size小于0、大于原数组长度,或start_index + size超出原数组合法索引范围时同样抛出异常
  • 校验通过后遍历start_index到start_index + size区间的索引,将对应元素依次append到预先创建的slice_array实例中
  • 原逻辑认为size + start_index可以正确限定新数组的元素范围与大小,但实际运行结果不符合预期。

问题根因

  1. 核心错误:最后返回的是一个全新的空DynamicArray()实例,而不是前面已经完成元素追加的slice_array变量,这直接导致返回的数组永远是空的,大小为0,和预期完全不符。
  2. 边界校验逻辑错误:判断size + start_index >= self._size会误拦截合法场景。例如原数组长度为5、start_index=3、size=2时,合法截取索引为3、4,此时start_index + size = 5刚好等于数组长度,属于合法范围,但原有判断会错误抛出异常。另外冗余的size > self._size判断完全可以被start_index + size > self._size覆盖,不需要单独写。

修复后代码

def slice(self, start_index: int, size: int) -> "DynamicArray":  
    slice_array = DynamicArray()
    # 参数合法性校验
    if start_index < 0 or start_index >= self._size:
        raise DynamicArrayException
    if size < 0 or start_index + size > self._size:
        raise DynamicArrayException

    # 追加指定区间的元素
    for i in range(start_index, start_index + size):
        slice_array.append(self._data[i])
    # 返回填充完成的切片数组
    return slice_array

修复点说明

  • 修正返回值:将最后返回的空DynamicArray()替换为已经完成元素填充的slice_array
  • 修正边界校验条件:将size + start_index >= self._size改为start_index + size > self._size,移除冗余的size > self._size判断,避免合法场景被误拦截
  • 移除条件判断中不必要的括号,符合Python编码规范

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 00:18:26