关注
、点赞
、✌收藏
、订阅
专栏数组列表是最常用的数据结构之一,其基础知识如下:
数据抽象化:
数组(Array),数组定义了一个序列数据结构,它看起来很像一个列表,除了所有成员必须是相同的类型。支持的类型都是数字或其他固定大小的原始类型。
其基本特征如下:
在python中,我们可以直接使用list来创建一个列表。其基本操作包括:
创建列表:list = [1,2,3]
得到列表的长度: len(list)
添加元素:list.append(a)
,
删除元素:list.pop()
删除整个列表:del list
排序:list.sort()
索引:list[a:b]
各项操作的时间复杂度如下:
上面我们介绍了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
本章的介绍到此介绍,如果文章对你有帮助,请多多点赞、收藏、评论、关注支持!!