今天学习了在python中自己构造一个数组的类,并且以此构造出自己的二维数组。
首先讲解一下python中的列表,为什么python中的列表可以用append方法一直增加元素呢?不可能申请一个特别大的空间的,这样太浪费了。所以我们需要换一种方法。解释一下两种大小一个叫做物理大小,一个叫做逻辑大小。物理大小就是你申请的空间的大小,而逻辑大小就是已经被使用的空间大小,即逻辑大小小于等于物理大小。当列表检测到它的逻辑大小和物理大小相等时,他就会重新创建一个更大的数组并且把已有的数据复制到该数组里去,从而实现可以一直在列表里添加元素。这个方法我们也会在待会自己编写数组结时用到。(数组的内部就是用列表的的方式来实现)
用户的数组操作 | Array类中的方法 |
---|---|
a = Array(10) | init(capacity,fillValue=None) |
len(a) | len() |
str(a) | str() |
for item in a: | iter() |
a[index] | getitem(index) |
a[index]= newitem | setitem(index,newitem) |
这就是我们要在类中实现的方法,下面我们给出类的具体代码实现
class Array:
#对数组进行初始化,并将其中的元素默认赋值为None
def __init__(self, capacity, fillValue = None):
self._item=list[]
for i in range(capacity):
self._item.append(fillValue)
#返回数组长度
def __len__(self):
return len(self._item)
#将数组作为字符串返回
def __str__(self):
return str(self._item)
#对数组中元素进行迭代
def __iter__(self):
return iter(self._item)
#返回数组中的指定元素
def __getitem__(self, index):
return self._item(index)
#给数组中的某一项赋值
def __setitem__(self, index, value):
self._item[index] = value
这样我们就完成了数组的基本操作。同时我们也可以在插入函数中增加一个判断检查物理大小和逻辑大小的差值,如果相等了,我们就新建一个大数组,将原有的是数据复制过去,被丢弃的数组会被垃圾处理机制删除掉。