02_动态数组的实现
2026/7/31 14:30:53 网站建设 项目流程

1. 数组的功能定义

方法说明
size()返回数组中元素个数
is_empty()判断数组是否为空
insert(index, item)在指定位置插入元素
append(item)在末尾插入元素
remove(index)删除指定位置的元素
set(index, item)修改指定位置的元素
get(index)获取指定位置的元素
find(item)查找数组中某个元素首次出现的位置
__str__()返回字符串 [元素1, 元素2, 元素3]
__iter__()返回迭代器对象
importrandomclassmyArray:# 初始化def__init__(self):self.__capacity=10self.__items=[None]*self.__capacity# 真正存储数据的容器结构,因为python中没有原始的数组,暂时用列表代替一下self.__size=0@property# 有它,外面访问size可以是 数组对象.size,没有它,外部访问size必须是 数组对象.size()# 数组长度defsize(self):returnself.__size# 数组是否为空defisEmpty(self):returnself.__size==0# 往数组中插入元素definsert(self,index,item):# 第一步:合法检查ifself.size<0orindex>self.__size:raiseIndexError# 第二步:扩容self.__grow()# 第三步: 把[index]及其后面的元素右移foriinrange(self.__size,index,-1):self.__items[i]=self.__items[i-1]# 第四步:把item放在[index]的位置self.__items[index]=item self.__size+=1# 扩容def__grow(self):# 选中你要抽取出来构成一个函数的所有代码,按快捷键 Ctrl + Alt + M,输入函数名ifself.__size>=self.__capacity:self.__capacity=self.__capacity+self.__capacity//2# 扩容 1.5倍# self.__capacity = self.__capacity + (self.__capacity >> 1)new_items=[None]*self.__capacityforiinrange(self.__size):new_items[i]=self.__items[i]self.__items=new_items# 往数组尾部追加元素defappend(self,item):# 第一步:扩容self.__grow()# 第二步:将元素放进去self.__items[self.__size]=item# 第三步:个数+1self.__size+=1# 删除数组元素defremove(self,index):# 第一步:检查index是否在已有元素的下标范围self.__check_exists_index(index)# 第二步:将[index]后的元素往前移动foriinrange(index,self.__size-1,1):self.__items[i]=self.__items[i+1]# 第三步:把size - 1self.__size-=1# 末尾位置置空self.__items[self.__size]=Nonedef__check_exists_index(self,index):#检查index是否在已有元素的下标范围ifself.size<0orindex>=self.__size:raiseIndexError# 修改数组元素defset(self,item,index):# 第一步:检查index是否在已有元素的下标范围self.__check_exists_index(index)# 第二步:直接覆盖[index]位置的元素self.__items[index]=item# 查找元素deffind(self,item):fori,eleinenumerate(self.__items):ifele==item:returnireturn-1# 没找到返回-1 或者抛异常# _str__ 是一个非常实用的魔术方法(Magic Method),专门用来自定义对象的字符串表示形式。# 有它,可以打印出元素的值,否则只能打印出<__main__.myArray object at 0x000001F5C8B03380>def__str__(self):result="["foriinrange(self.__size):result+=str(self.__items[i])result+=","ifi<self.__size-1else""returnresult+"]"# 迭代器,有了它,在外部可以直接用for循环遍历def__iter__(self):index=0whileindex<self.__size:yieldself.__items[index]index+=1if__name__=='__main__':array=myArray()print(f'最开始的列表长度:{array.size}')print(f"是否为空:{array.isEmpty()}")foriinrange(16):index=random.randint(0,array.size)array.insert(index,i)print('array',array.size)print(array)array.append(55)array.append(66)array.append(77)print(array)array.remove(1)print(array)array.remove(5)print(array)array.remove(10)print(array)array.set(22,1)print(array)print(array.find(2))print(array.find(100))foreleinarray:# for循环遍历需要迭代器 __iter__print(ele)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询