"""
线性结构:
特点:内存连续,下标访问
----------------------------------------------------------------------------
## array(python内置了array):
缺陷:只能存同一类型,只能存比较基本的数值,字符类型
一般用的不多,常用numpy
----------------------------------------------------------------------------
## list
init:新建了一个 PyListObject 对象;O(1)
append:
最开始先分派4个 PyObject 内存,
使用 append 的时候,如果已经有足够多的内存空间,则时间复杂度O(1);
内存不够,需要重新开辟空间(每次开辟4个),则时间复杂度O(n)
insert:
往中间插入,涉及重新开辟空间,O(n)
pop:
默认删除最后一个元素,O(1)
在中间删除元素,O(n)
remove:
除元素后,后续每个元素需要往前移动一位,O(n)
注释:
注意内存容量和 length 长度的区别
如果频繁的 remove,insert 操作的话,list的效率其实并不太高
"""
class MyArray(object):
def __init__(self, size=32):
self.size = size
self._items = [None]*self.size
def __getitem__(self, item):
return self._items[item]
def __setitem__(self, item, value=None):
self._items[item] = value
def __len__(self):
return self.size
def clear(self, value=None):
for i in range(len(self._items)):
self._items[i] = value
def __iter__(self):
for i in self._items:
yield i
def test_array():
a = MyArray(10)
a[0] = 99
a[1] = 33
assert a[0] == 99
assert a[1] == 33