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
相关产品推荐
相关产品推荐

