我们总是习惯 数组下标从零开始,为了改变一下习惯,我实现了一个任意下标开始的数组
class Array:
#初始化 T(n)=O(n)
def __init__(self,length=0,baseIndex=0):
assert length>=0
self._data=[None for i in range(length)]
self._baseIndex=baseIndex
#拷贝 note: this is shallow copy
def __copy__(self):
result=Array(self.length)
for i,c in enumerate(self._data):
result[i]=c #T(n)=O(n)
result._baseIndex=self._baseIndex
return result
#实现任意下标的关键函数
def GetOffset(self,index):
offset=index-self._baseIndex
if offset<0 or offset>=len(self._data):
raise IndexError
return offset
#overwrite the function to access the elements
def __getitem__(self,index):
offset=self.GetOffset(index)
return self._data[offset]
def __setitem__(self,index,value):
offset=self.GetOffset(index)
self._data[offset]=value
def GetData(self):
return self._data
def GetbaseIndex(self):
return self._baseIndex
def setBaseIndex(self,baseIndex):
self._baseIndex=baseIndex
data=property(
fget=lambda self:self.GetData())
baseIndex=property(
fget=lambda self: self.GetbaseIndex()
)
p=Array(10,2)
import random
for c in range(2,12):
p[c]=random.randint(0,10)
c=p
print(c.data)