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

Python自定义ArrayList类追加列表打印返回对象非数组的解决(禁用extend)

问题原因

你的代码存在三个核心错误:

  • 实例化逻辑错误:先给ls赋值了初始列表[1,2,3,4],之后又执行ls = ArrayList()直接覆盖了原有值,自定义类实例中完全没有初始的四个元素
  • appendAll方法逻辑错误:当前方法每次仅创建长度+1的新数组,循环原有元素时重复覆盖赋值,且会把传入的整个列表当做单个元素插入,无法实现批量追加
  • 缺少字符串表示方法:Python打印自定义类实例默认输出内存地址,需要实现__str__魔法方法返回内部存储数组的字符串形式
修正方案
  • 调整类的初始化方法,支持传入初始列表完成初始化
  • 重写appendAll方法,手动遍历传入的可迭代对象,逐个扩容添加元素(全程不使用extend内置方法)
  • 新增__str__魔法方法,定义打印时的输出内容
完整可运行代码
class ArrayList:
    def __init__(self, initial_list=None):
        self.inArray = []
        self.count = 0
        # 处理初始传入的列表
        if initial_list is not None:
            for item in initial_list:
                self.inArray.append(item)
                self.count += 1

    def appendAll(self, iterable):
        # 手动遍历所有待追加元素,逐个扩容添加,不使用extend方法
        for item in iterable:
            original_len = len(self.inArray)
            # 手动创建扩容后的新数组
            newArray = [0] * (original_len + 1)
            # 拷贝原有元素到新数组
            for i in range(original_len):
                newArray[i] = self.inArray[i]
            # 插入新元素
            newArray[original_len] = item
            self.inArray = newArray
            self.count += 1

    # 定义打印时的输出格式
    def __str__(self):
        return str(self.inArray)

# 初始化时传入初始列表
ls = ArrayList([1, 2, 3, 4])
ls.appendAll([90, 25])
print(ls)

运行后输出结果为:[1, 2, 3, 4, 90, 25],符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 14:57:03