Question about implementing static Arrays class in python

Viewed 31

Recently I am studying mit cs6.006. In the recitation 2, sattic arrays are implemented as following:

class Array_Seq: 
    def __init__(self) -> None:
        self.A=[]
        self.size=0

    def __len__(self):   # My question here
        return self.size
    def __iter__(self):
        yield from self.A
    def build(self,X):   # My question here
        self.A=[a for a in X]
        self.size=len(self.A)

    def get_at(self,i):
       return self.A[i]
    def set_at(self,i,x):
        self.A[i]=x
    def _copy_forward(self,i,n,A,j):
        for k in range(n):
            A[j+k]=self.A[i+k]

    def _copy_backward(self,i,n,A,j):
        for k in range(n-1,-1,-1):
            A[j+k]=self.A[i+k]

    def insert_at(self, i, x): # O(n)
        n = len(self)
        A = [None] * (n + 1)
        self._copy_forward(0, i, A, 0)
        A[i] = x
        self._copy_forward(i, n - i, A, i + 1)
        self.build(A)

    def delete_at(self, i): # O(n)
        n = len(self)
        A = [None] * (n - 1)
        self._copy_forward(0, i, A, 0)
        x = self.A[i]
        self._copy_forward(i + 1, n - i - 1, A, i)
        self.build(A)
        return x
    def insert_first(self, x): self.insert_at(0, x)
    def delete_first(self): return self.delete_at(0)
    def insert_last(self, x): self.insert_at(len(self), x)
    def delete_last(self): return self.delete_at(len(self) - 1)

My question

I don't know how the function len() and build() work for the size:

when I use build(), this function will let self.size=len(), however, in the definition of len(), it will return self.size. I don't understand how it works.

0 Answers
Related