实现的任意下标开始的数组类

我们总是习惯 数组下标从零开始,为了改变一下习惯,我实现了一个任意下标开始的数组

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)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值