python dynamic array
2021-05-17 12:30
标签:copy pop 构造函数 ext pre lis self 定位 col 首先 必须 用于生成指定大小的数组 constructor, 生成一个初始容量为10,里面一个元素都没有的数组 实现__len__函数,此函数是用于 当你使用len()函数时,会调用__len__()函数 判空 获取当前数组中的某个元素 追加元素 创建数组和扩充数组 在指定位置插入一个value 将指定位置的元素删除 删除指定value的元素(找到第一个就结束) 打印数组中的元素 测试代码: 测试输出 python dynamic array 标签:copy pop 构造函数 ext pre lis self 定位 col 原文地址:https://www.cnblogs.com/zhanyifan/p/9746610.html用python 语言实现一个动态数组 类似于python内置的list
import ctypes
#构造函数,创建了三个属性,分为用于指定初始容量,当前大小和当前数组
def __init__ (self):
‘Create an empty array.‘
self._n = 0 #size
self._capacity = 10
self._A = self._make_array(self._capacity)
#构造函数中创建了_n属性来指定当前大小
def __len__ (self):
return self._n
# _n指定当前大小
def is_empty(self):
return self._n == 0
# 因为python的数组下标可以是负数,但是这边没有进行相应的实现,有兴趣的可以自行实现
def __getitem__ (self, k):
if not 0 self._n:
raise ValueError(‘invalid index‘)
return self._A[k]
def append(self, obj):
#当数组当前元素已满时,扩充容量为原来的两倍,在进行追加
if self._n == self._capacity:
self._resize(2 * self._capacity)
self._A[self._n] = obj
self._n += 1
def _make_array(self, c):
return (c * ctypes.py_object)( )
def _resize(self, c):
B = self._make_array(c)
#扩充之后,需要将原数组中的元素copy到新数组中
for k in range(self._n):
B[k] = self._A[k]
self._A = B
self._capacity = c
def insert(self, k, value):
#当数组当前元素已满时,扩充容量为原来的两倍,在进行insert
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
def pop(self,idx):
if idx >= self._n:
raise ValueError( ‘index out of bounds‘ )
for i in range(idx,self._n - 1):
self._A[i]=self._A[i+1]
self._A[self._n - 1] = None
self._n -= 1
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‘ )
def _print(self):
for i in range(self._n):
print(self._A[i], end = ‘ ‘)
print()
mylist = DynamicArray()
print (‘size was: ‘, str(len(mylist)))
mylist.append(10)
mylist.append(20)
mylist.append(30)
mylist.insert(0, 0)
mylist.insert(1, 5)
mylist.insert(3, 15)
mylist._print()
mylist.remove(20)
mylist._print()
print (‘size is: ‘, str(len(mylist)))
mylist.pop(3)
mylist._print()
print (‘size is: ‘, str(len(mylist)))
size was: 0
0 5 10 15 20 30
0 5 10 15 30
size is: 5
0 5 10 30
size is: 4