
python实现数组
发布日期:2021-05-14 15:19:51
浏览次数:25
分类:精选文章
本文共 4260 字,大约阅读时间需要 14 分钟。
Python实现数组:数组类与常用操作说明
数据结构定义
一个完整的数据结构的定义应包含成员构造、增、删、改、查等基本操作,并提供返回大小及是否为空的功能。通过这样的设计,可以有效地管理和操作数组型数据集合。
难点分析
在实现一个基本的数组类时,主要难点在于细节处理,比如成员构造、数组动态调整、元素的增删查改以及异常处理等。
成员构造
类初始化时,需设置默认容量为100。通过这样的设定,可以方便地初始化数组实例。
def __init__(self, capacity=100): self._capacity = capacity self._size = 0 self._data = [None] * self._capacity
数组增操作
支持元素插入,位置可通过索引指定。此外,还提供了添加元素到末尾或开头的功能。
def add(self, index, elem): if index < 0 or index > self._size: raise Exception("Index is Illegal!") if self._size == self._capacity: self._resize(self._capacity * 2) for i in range(self._size - 1, index - 1, -1): self._data[i + 1] = self._data[i] self._data[index] = elem self._size += 1def addFirst(self, elem): self.add(0, elem)def addLast(self, elem): self.add(self._size, elem)
数组删操作
支持按索引删除元素,并提供删除开头或末尾元素的特定方法。删除操作还需处理数组拼接问题,确保数组在删除后能正确调整至初始状态。
def remove(self, index): for i in range(index, self._size - 1): self._data[i] = self._data[i + 1] self._size -= 1 self._data[self._size] = None if self._size and self._capacity // self._size == 4: self._resize(self._capacity // 2) return retdef removeFirst(self): self.remove(0)def removeLast(self): self.remove(self._size - 1)
数组改操作
允许指定索引位置修改元素值,直接赋值即可。
def set(self, index, elem): if index < 0 or index > self._size: raise Exception("Index is Illegal!") self._data[index] = elem
数组查操作
支持逐个元素查找,返回特定索引的元素值。用户还可以通过getFirst和getLast方法分别获取数组首尾元素。
def get(self, index): if index < 0 or index > self._size - 1: raise Exception("Index is Illegal!") return self._data[index]def getFirst(self): return self._data[0]def getLast(self): return self._data[self._size - 1]
数组查找操作
查找元素可通过线性搜索或高效算法实现。提供找一个元素的方法,以及找到所有元素索引的方法。
def find(self, elem): for i in range(self._size): if self._data[i] == elem: return i return -1def findAll(self, elem): res = Array() for i in range(self._size): if self._data[i] == elem: res.addLast(i) return res
数组大小与容量操作
提供一个获取当前数组大小的方法,以及获取最大容量的方法。此外,还可以通过方法查询数组是否为空。
def get_size(self): return self._sizedef get_capacity(self): return self._capacitydef is_empty(self): return self._size == 0
数组增大或缩小操作
提供动态调整数组大小的功能,当数组容量不足时自动扩展,或在元素稀疏时减少数组大小以优化空间使用。
def _resize(self, new_capacity): self._capacity = new_capacity newArray = Array(new_capacity) for i in range(self._size): newArray._data[i] = self._data[i] self._data = newArray._data
附加功能
此外,还提供了交换元素位置、打印数组信息等辅助功能。
def swap(self, index1, index2): if index1 < 0 or index2 < 0 or index1 >= self._size or index2 >= self._size: raise Exception("Index is illegal") self._data[index1], self._data[index2] = self._data[index2], self._data[index1]def remove_max_element(self): max_index = self.get_max_index() self.remove(max_index)def get_max_index(self): if self.is_empty(): raise Exception("Error, Array is Empty!") max_index = 0 for i in range(1, self.get_size()): if self._data[i] > self._data[max_index]: max_index = i return max_indexdef remove_min_element(self): min_index = self.get_min_index() self.remove(min_index)def get_min_index(self): if self.is_empty(): raise Exception("Error, Array is Empty!") min_index = 0 for i in range(1, self.get_size()): if self._data[i] < self._data[min_index]: min_index = i return min_indexdef print_array_info(self): print(f"Current data: {self._data[:self._size]}") print(f"Size: {self.get_size()}") print(f"Capacity: {self.get_capacity()}")
测试示例
以下是一些具体的操作示例,供测试验证。
# 初始化并添加元素array = Array()array.addLast(1)array.addLast(2)array.addLast(3)array.addLast(4)array.addLast(5)array.addFirst(6)array.add(1, 100) # 在索引1的位置添加100print(array.get(1)) # 输出结果应为100# 获取数组首位和末位元素print(array.getFirst()) # 输出应为6print(array.getLast()) # 输出应为5# 修改数组中的元素array.set(1, 1000)print(array[1]) # 输出应为1000# 检查元素是否存在print(array.contains(1000)) # 输出应为True# 查找元素位置print(array.find(1000)) # 输出应为1# 打印数组信息print("Array contents: ", end=' ')array.print_array_info()
总结
通过以上说明,可以清楚地掌握Python实现数组的基本实现方法和常用操作。以上实现涵盖了数组类的主要功能,通过合理设计使得数组能够高效地管理和操作数据集合。
发表评论
最新留言
初次前来,多多关照!
[***.217.46.12]2025年04月26日 22时21分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
1965 - 2019 年最流行的编程语言变化
2019-03-11
链上钱包的博彩雷区
2019-03-11
GRUB2
2019-03-11
微信JS-SDK DEMO页面和示例代码
2019-03-11
Chrome查找发请求的js之黑箱调试
2019-03-11
CMCC登录参数分析
2019-03-11
GridView的另外一种分页方式,可提高加载速度
2019-03-11
GridView自定义删除操作
2019-03-11
http常见响应状态码
2019-03-11
Nginx Location
2019-03-11
解决github Git clone 慢的问题
2019-03-11
一张图搞定RPC框架核心原理
2019-03-11
Scala中的包
2019-03-11
参加阿里的Java面试经验
2019-03-11
Python微信公众号
2019-03-11
他来了他来了,他带着云栖大会的免费门票走来了
2019-03-11
Oracle笔记
2019-03-11
如何复用外部shell脚本
2019-03-11