TIL - Data Structure(자료구조)

KDG·2020년 6월 8일
0

Data Structure(자료구조)

  • 데이터에 편리하게 접근, 조작하기위해 데이터를 저장하거나 조직하는 방법
  • 상황과 문맥에 맞게 데이터를 담을수있는 적절한 구조
  • 데이터에 맞는 적절한 자료구조를 사용하는 것이 전체 개발 시스템에 굉장히 큰 영향을 미친다.

1. Array(List)

  • python에서 array와 list는 다른거지만 유사하다. 두개를 비교하자면 array가 데이터를 적게사용한다. 하지만 list를 많이 사용한다.

  • array사용은 array함수를 import해야함

  • Array(List)의 특징

    • 순차적으로 데이터 저장
    • 자료구조에 저장하는 데이터를 일반적으로 요소(element)라고 함
    • 연결된 데이터들을 순차적으로 저장할 때 사용
    • 순서가 상관없더라도 서로 연결된 데이터를 저장할 때 사용
    • 삽입 순서대로 저장
    • 이미 생성된 리스트도 수정가능
    • Multi-dimentional Array(다중차원배열) - array의 요소가 array가 될 수 있음
  • Array(List)의 단점

    • 중간의 요소를 추가,삭제하면 뒤에 있는 요소들은 앞으로 한칸씩 이동해야함
      => 배열에서 요소를 추가,삭제하는 것이 다른 구조에 비해 느릴수있음
    • 요소를 추가,삭제하는 과정이 코드상에서는 한줄이지만 실제 메모리에서 이루어지는 작업은 훨씬 큼
    • array(list)는 정보가 자주 삭제되거나 추가되는 데이터를 담기에 적절치않음
  • Array Resizing(사이즈 재조정)

    • 배열이 처음 생성될 때 어느정도 메모리를 미리 할당(pre-allocation)
    • 처음 할당한 메모리 이상으로 요소들이 많아지면 메모리를 더 할당해야 함(resizing)
    • 배열의 resizing은 상대적으로 오래걸리는 operation
    • 사이즈 예측이 잘 안되는 데이터를 다루기에 적절하지않다.
  • Array(List) 사용하기 좋은 경우

    • 순차열적인 데이터를 저장할 때
    • 다차원 데이터를 다룰 때
    • 어떠한 특정요소를 빠르게 읽어야 할 때
    • 데이터 사이즈가 급변하게 자주 변하지 않는 것
    • 요소를 자주 삭제하거나 추가하지 않는 것

2. Tuple(튜플)

  • array(list)와 유사한 순차적 저장가능한 순열자료구조
  • 한 번 정의되면 수정이 불가능
  • 2~3개 정도 적은 수의 소규모 데이터를 저장할 때 많이 사용
  • 함수에서 리턴값을 한개이상 리턴하고 싶을 때 자주 사용
  • Tuple의 장점
    • 간단한 값을 빨리 표현하고 싶을 때 많이 사용
  • Tuple의 단점
    • 데이터가 무엇을 의미하는지 명확하지 않음
    • 데이터의 의미를 문맥을 보고 가정해야 함
    • 단점보완으로 named tuple을 사용하면 됨
  • 사용하기 좋은 경우
    • 간단한 데이터를 표현할 때
      ( tuple은 list보다 더 가볍고 메모리를 적게 먹음)
      ex) 좌표데이터

다른 TIL

  • enumerate 함수

    • 리스트가 있는 경우 순서와 리스트 값 전달 기능
    • 순서가 있는 자료형을 입력으로 받아 인덱스 값을 포함하고 객체 리턴
    • 보통 for문과 함께 사용

    ex)

def two_sum(nums, target):
  for i_index, i_value in enumerate(nums):
    for j_index, j_value in enumerate(nums):
      
      sum = i_value + j_value
      index_list = [i_index, j_index]
      
      if sum == target:
        return index_list
        
# i_index, i_value값을 따로 지정해주면 i_index에는 인덱스 번호가 들어가고,
i_value에는 value값이 들어간다.
그래서 value값을 더하고 인덱스 번호만 따로 리턴할 수 있다.

0개의 댓글