1 분 소요

ArrayList 뜯어보기!

  • 언제나 기본기가 제일 중요함
  • 그렇다면? 구조 뜯어 버리기!
class ArrayList:
    def __init__(self, size=10):
        self.max_size = size # maximum memory capacity
        self.list = [None] * self.max_size # allocate array
        self.size = 0 # current actual size (number of elements)

    def add(self, value):
        if self.size >= self.max_size: # check if enough memory capacity
            self._increase_size()
        self.list[self.size] = value # 기존에 인덱스 0에 값 넣기
        self.size += 1 # 인덱스 숫자 증가

    def _increase_size(self):
        new_max_size = self.max_size * 2 # double memory size
        new_list = [None] * new_max_size
        for i in range(0, self.max_size): # copy old list to new list
            new_list[i] = self.list[i] # 늘어난 list에 기존 list 복사
        self.max_size = new_max_size # 늘어난 사이즈로 갱신
        self.list = new_list # 업데이트된 데이터의 새로운 리스트를 다시 기존 이름으로 갱신

    def get(self, index):
        if index >= self.size or index < 0:
            raise Exception('Invalid index')

        return self.list[index]

    def delete(self, index):
        if index >= self.size or index < 0:
            raise Exception('Invalid index')

        # shift list from deleted index onwards
        # element before index are not affected by deletion
        for i in range(index, self.size): 
            self.list[index] = self.list[index+1]

        self.size -= 1

자바스크립트에서는 Array, 파이썬에서는 List

  • 파이썬에서 Array를 사용하려면 내장 모듈을 사용해야하며 Array 와 List는 엄연히 다르다고 한다.
  • 기능적으로는 거의 동일하지만 메모리 효율 면에서 Array가 더 유리하다고 한다.

Array 특징

  • 제일 큰 특징은 순차적으로 데이터를 저장한다는 점
  • 데이터를 효율적인 고정 타입 데이터 버퍼에 저장
  • numpy array는 다양한 연산도 가능
    • 동적으로 사용하기 편하게 쓰려면 기본 list
    • 저장만 효율적으로 하려면 array 모듈
    • 저장 이후 연산을 효율적으로 하려면 numpy array

그럼 Array 를 언제 사용하는게 좋을까?

  • 순차열적인 데이터를 저장할 때
    ex) 주식 가격 등 값보다는 순서가 중요한 데이터
  • 다차원 데이터를 다룰 때
  • 특정한 요소를 빠르게 읽어야 할 때
    index 를 통해 곧바로 읽을 수 있으므로
  • 데이터의 사이즈가 급변하지 않을 때
  • 요소가 자주 삭제/추가되지 않을 때

참고 : https://wikidocs.net/189478 , https://velog.io/@lilyoh/%EC%9E%90%EB%A3%8C%EA%B5%AC%EC%A1%B0-1.-Array-List, https://brownbears.tistory.com/636

댓글남기기