Pythonとデータ構造学習---3

6975 ワード

以下、Arrayを用いるVector.すなわちPythonに付属するlist()を実現する.
コードは次のとおりです.
class Vector:

    def __init__(self):

        self._length = 0

        self._capacity = 2

        self._array = Array(self._capacity)

        

    def __len__(self):

        return self._length

    

    def __contains__(self,item):

        for v in self:

            if v == item:

                return True

        return False

        

    def __getitem__(self,index):

        return self._array[index]

    

    def __setitem__(self,index,value):

        self._array[index] = value

        

    def __new_array(self):

        oldCap = self._capacity

        newCap = self._capacity * 2

        

        newArray = Array(newCap)

        for i,v in enumerate(self._array):

            newArray[i] = v

        self._array = newArray

        self._capacity = newCap       

    

        

    def append(self,item):

        if self._length == self._capacity:

            self.__new_array()

        self._array[self._length] = item

        self._length += 1

    

    def insert(self,ndx,item):

        if self._length == self._capacity:

            self.__new_array()

        for i in range(self._length,ndx,-1):

            self[i] = self[i-1]

        self._array[ndx] = item

        self._length += 1

    

    def remove(self,ndx):

        for i in range(ndx,self._length):

            self[i] = self[i+1]

        self._length -= 1

    

    def indexOf(self,item):

        for i,v in enumerate(self):

            if v == item:

                return i

        return -1

    

    def extend(self,otherVector):

        for v in otherVector:

            self.append(v)

    

    def subVector(self,f,t):

        newV = Vector()

        for i in range(f,t):

            newV.append(self._array[i])

        return newV

    

    def __iter__(self):

        return _VectorIterator(self)

    

    

class _VectorIterator:

    def __init__(self,theVector):

        self._vectorRef = theVector

        self._curNdx = 0

    def __iter__(self):

        return self

    def next(self):

        if self._curNdx < len(self._vectorRef):

            entry = self._vectorRef[self._curNdx]

            self._curNdx += 1

            return entry

        else:

            raise StopIteration

テストは基本的にlistと同じです.
中间は1つの小さい东に関连して.Pythonで関数を隠すために、データ.は前に``をつけるだけですいいですよ.もちろんデータ、関数はまだあります.名前を変えただけです.具体的には(覚えています.)を見ることができます.
 
寝る前に...