当底层数组已满,要添加新元素时,底层数组需要扩大两倍,当删除的元素小于数组的1/4时,数组缩小为原来的两倍,此处的底层数组的创建由ctypes模块来实现,封装在方法_make_array中。
import ctypes
class DynamicArray():
def __init__(self):
self._n = 0
self._capacity = 1
self._A = self._make_array(self._capacity)
def __len__(self):
return self._n
def __getitem__(self, item):
if not 0 <= item < self._n:
raise IndexError('invalid index')
return self._A[item]
def append(self, value):
if self._n == self._capacity:
self._resize(2 * self._capacity)
self._A[self._n] = value
self._n += 1
def pop(self):
self._A[self._n - 1] = None
self._n -= 1
if self._n < self._capacity // 4:
self._resize(self._capacity // 2)
def _resize(self, n):
B = self._make_array(n)
for i in range(self._n):
B[i] = self._A[i]
self._A = B
self._capacity = n
def _make_array(self, c):
return(c * ctypes.py_object)( )
if __name__ == '__main__':
dd = DynamicArray()
dd.append(2)
dd.append(3)
dd.pop()
for i in dd:
print(i)
结果为 2