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

Python动态数组List的extend函数实现问题:输出嵌套列表不符合预期

问题分析与修复方案

你的extend函数出现嵌套列表的问题,核心原因有两点:

  1. 参数使用*ArrObj导致传入的列表被打包成元组的单个元素,直接访问ArrObj[j]会拿到整个列表而非内部元素;
  2. 嵌套循环逻辑错误,没有遍历目标列表的内部元素,反而把整个列表作为单个元素追加。

修复后的代码

方案1:和Python内置list.extend行为一致(接收单个可迭代对象)

# Writing logic for extend function
def extend(self, iterable):
    # 遍历可迭代对象的每个元素,逐个追加
    for item in iterable:
        self.append(item)
    return self.__str__()

方案2:支持传入多个可迭代对象(保持*可变参数)

如果需要同时扩展多个可迭代对象(比如my_list.extend(arr1, arr2, arr3)),可以修改为:

# Writing logic for extend function
def extend(self, *iterables):
    # 遍历每个传入的可迭代对象
    for iterable in iterables:
        # 遍历当前可迭代对象的元素并追加
        for item in iterable:
            self.append(item)
    return self.__str__()

错误原因详解

  • 原代码中*ArrObj是可变参数,当你调用extend([89,99,67,78,101])时,ArrObj会被打包成元组([89,99,67,78,101],),长度为1;
  • 内层循环ArrObj.__getitem__(j)拿到的是整个列表而非内部元素,执行append(item)就会把整个列表作为单个元素加入,形成嵌套结构;
  • 嵌套的for循环逻辑冗余且错误,完全没必要按索引遍历,直接迭代可迭代对象的元素是更简洁且正确的方式;
  • 手动提前__resize的代码可以去掉,因为append方法本身应该已经实现了自动扩容逻辑(当元素数量等于数组容量时触发扩容),提前指定扩容大小反而可能不符合动态数组的扩容策略(通常是翻倍扩容以保证分摊O(1)复杂度)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 15:57:18