【Python数据结构与算法】(二):数组列表(ArrayList)
【Python数据结构与算法】(二):数组列表(ArrayList)
- ✨本文收录于《Python数据结构与算法》专栏,此专栏主要记录如何python学习数据结构与算法笔记。
- 🌸个人主页:JoJo的数据分析历险记
- 📝个人介绍:小编大四统计在读,目前保研到统计学top3高校继续攻读统计研究生
- 💌如果文章对你有帮助,欢迎✌
关注
、👍点赞
、✌收藏
、👍订阅
专栏
文章目录
1. 数组列表(ArrayList)
数组列表是最常用的数据结构之一,其基础知识如下:
- 按顺序存储数据
- 连续存储
- 允许添加或删除元素的随机访问、可变大小的列表数据结构
- 例如,可用酒店房间列表、城市列表和书籍列表
数据抽象化:
- 要明确我们操作的数据元素
- 确定需要进行的操作
- 对这些操作定义完整的接口
- 完成对象
- 得到我们的抽象数据类型
2. 数组(Array)
数组(Array),数组定义了一个序列数据结构,它看起来很像一个列表,除了所有成员必须是相同的类型。支持的类型都是数字或其他固定大小的原始类型。
其基本特征如下:
- 数组必须是连续的
- 数组长度是固定的
- 可以索引,0为开始值
- 数组里面放的数据类型是一样的,注意和我们的列表不一样
- 边界检查,超过索引会报错
3. Python内置的列表(List)
在python中,我们可以直接使用list来创建一个列表。其基本操作包括:
-
创建列表:
list = [1,2,3]
-
得到列表的长度:
len(list)
-
添加元素:
list.append(a)
, -
删除元素:
list.pop()
-
删除整个列表:
del list
-
排序:
list.sort()
-
索引:
list[a:b]
各项操作的时间复杂度如下:
4. 创建一个List类
上面我们介绍了python中内置list的一些基本操作,接下来,我们自己创建一个list类,具体代码如下:
import ctypes
class ListArray:
def __init__ (self):
'生成一个空的列表.'
self._n = 0 #当前列表的内容长度
self._capacity = 10#列表容量
self._A = self._make_array(self._capacity)
# len(list)
def __len__ (self):
return self._n
"""判断是不是空的数组"""
def is_empty(self):
return self._n == 0
"""生成动态数组"""
def _make_array(self, c):
return (c * ctypes.py_object)( )
def _resize(self, c):
B = self._make_array(c)
for k in range(self._n):
B[k] = self._A[k]
self._A = B
self._capacity = c
"""
第k个元素是多少
时间复杂度为:O(1)
"""
def __getitem__ (self, k):
if not 0 <= k < self._n:
raise ValueError('invalid index')
return self._A[k]
"""
添加元素
时间复杂度:O(1)
"""
def append(self, obj):
if self._n == self._capacity:#判断现在的数组长度是不是已经等于容量了
self._resize(2 * self._capacity)#数组扩充
self._A[self._n] = obj #添加
self._n += 1
"""
在第k个位置插入一个元素
时间复杂度:O(n)
"""
def insert(self, k, value):
if self._n == self._capacity:
self._resize(2 * self._capacity)
for j in range(self._n, k, -1):#从后往前插入
self._A[j] = self._A[j-1]
self._A[k] = value
self._n += 1
"""
删除某一个指定的value
时间复杂度:O(n)
"""
def remove(self, value):
for k in range(self._n):
if self._A[k] == value:
for j in range(k, self._n - 1):
self._A[j] = self._A[j+1]
self._A[self._n - 1] = None
self._n -= 1
return
raise ValueError( 'value not found' )
"""
删除最后一个元素
时间复杂度:O(1)
"""
def pop(self):
self._A[self._n] = None
self._n -= 1
"""
进行排序
时间复杂度:O(nlogn)
"""
def sort(self):
for i in range(1, self._n):
B = self._A[i]
j = i - 1
while j >= 0 and self._A[j] > B:
self._A[j + 1] = self._A[j]
j -= 1
self._A[j + 1] = B
def _print(self):
for i in range(self._n):
print(self._A[i], end = ' ')
print()
mylist = ListArray()
print ('size was: ', str(len(mylist)))
mylist.append(1)
mylist.append(2)
mylist.append(3)
mylist.insert(0, 4)
mylist.insert(1, 5)
mylist._print()#此时列表中有五个数据
mylist.pop()#删除最后一个元素
mylist.remove(1)#删除元素1
mylist.sort()#排序
mylist._print()#打印排序后的列表
print ('size is: ', str(len(mylist)))
4 5 1 2 3
size was: 0
2 4 5
size is: 3
本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】