Python Data structure

soominlee·2022년 7월 26일
0

🐍 Python

목록 보기
6/14

*해당 게시글은 <NAVER boostcourse> 에서 수강한 강의를 바탕으로 정리한 내용입니다.

Python의 기본 자료형에서 나아가 특징을 가지는 자료들을 다룰 수 있는 python data structure에 대해 다룬다.

파이썬 기본 데이터 구조

  • stack & queue
  • tuple & set
  • dictionary
  • collection module

1. Stack

: 나중에 넣은 데이터를 먼저 반환하도록(LIFO, last in first out) 설계된 메모리 구조

  • data의 입력: push
  • data의 출력: pop
  • 리스트를 사용해서 stack 구현이 가능하다.
    push : append()
    pop : pop() # pop한 값에 대한 return이 있으면서 리스트의 값이 변함

ex) 택배 화물차의 물건 데이터를 다룰 때 사용할 수 있다.

2. Queue

: 먼저 넣은 데이터를 먼저 반환하도록(FIFO, first in first out) 설계된 메모리 구조

  • data의 입력: put
  • data의 출력: pop(0)
  • 리스트를 사용해서 queue 구현이 가능하다.
    put : append()
    pop : pop(0) # 첫번째 값을 뺀다.

3. Tuple

: 값의 변경이 불가능한 리스트로, 선언 시 ()를 사용한다.
리스트의 연산, 인덱싱, 슬라이스 등 모두 사용 가능함.
값이 하나인 tuple은 반드시 ,를 붙여야 함 t=(1,) 붙이지 않는 경우 하나의 값으로 인식됨

Tuple을 사용하는 경우
프로그램을 작동하는 동안 변경되지 않아야 하는 데이터를 저장
함수의 반환 값 등 사용자의 실수에 의한 에러를 사전에 방지하기 위함

4. Set (집합)

: 값을 순서 없이 저장하는 자료구조, 중복을 불허한다.

  • set 객체 선언을 통해 생성
	s = set([1,2,3,4,5])
    s = {1,2,3,4,5}
    
    # 추가, 삭제 함수
    s.add(6) # 원소 추가
    s.remove(6) # 원소 삭제
    s.update([6,7,8]) # 여러 값을 추가할 때 
    s.discard(3) # 원소 삭제
    s.clear() # 모든 원소 삭제
    
    # 집합 연산 함수
    s1.union(s2) # 합집합 
    s1 | s2 	 
    s1.intersection(s2) # 교집합
    s1 & s2 
    s1.difference(s2) # 차집합
    s1 - s2
    

5. Dictionary

: 데이터를 저장할 때 key와 value를 함께 저장하는 자료 구조

  • key: 데이터를 저장할 때 구분 지을 수 있는 값

*다른 언어에서는 Hash table이라는 용어를 사용 (약간 차이점이 있긴 함)

	dict_var = {'a': 1, 'b': 2, 'c': 3}
    
    dict_var.items() # Dict 데이터 출력 (key, value) 튜플형태
    dict_var.keys() # Dict key 값들 출력
    dict_var.values() # Dict value 값들 출력

6. Collection

: List, Tuple, Dict에 대한 확장 자료구조(모듈)

제공하는 모듈

	from collections import deque
    from collections import Counter
    from collections import OrderedDict
    from collections import defaultdict
    from collections import namedtuple

deque
: stack과 queue를 지원하는 모듈, list에 비해 효율적인 자료 저장 방식을 지원함

  • rotate, reverse 등 linked list의 특성을 지원
  • list에서 사용할 수 있는 함수를 모두 사용할 수 있음

OrderedDict
: Dictionary와 달리, 데이터를 입력한 순서대로 dict을 반환함

defualtdict
: Dict type의 값에 기본 값을 지정함으로써, 신규 값 생성 시 지정 값이 없을 때 defutl값을 사용하기 위함

  • word counter 예시
	from collections import OrderedDict
    
    # 하나의 지문(text)에 어떤 단어들이 몇개 포함되어있는지 세고 싶은 경우
    word_count = defualtdict(lambda: 0)
    
    for word in text:
    	word_count[word] += 1
    
    for i, v in OrderedDict(
    						sorted(word_count.items(), 
                            key=lambda t: t[1],
                            reverse=True)).items():
        print(i, v)

Counter
: sequence type의 data element들의 갯수를 dict 형태로 반환

	from collections import Counter
    
    c = Counter()
    c = Counter("gallahad")
    print(c)
	> Counter({'a': 3, 'l': 2, 'g': , 'd': 1, 'h': 1})
    
    c = Counter({'red': 4, 'blue': 2})
    print(c.elements())
    > ['blue', 'blue', 'red', 'red', 'red', 'red']
    
  • Set의 연산들을 지원함
	c = Counter(a=4, b=2, c=0, d=-2)
    d = Counter(a=1, b=2, c=3, d=4)
    c.subtract(d)
    print(c)
    > Counter({'a':3, 'b':0, 'c':-3, 'd':-6})
    # 교집합 합집합 + 연산 모두 지원
  • word counter 기능도 손쉽게 제공함
    : counter 객체에 list 형태로 text를 전달하면 됨

namedtupe
: Tuple 형태로 Data 구조체를 저장하는 방법
tuple은 데이터에 접근하려면 위치 정보를 기억해야한다는 번거로움이 있음

namedtuple은 클래스 처럼 객체를 생성할 수 있고, tuple처럼 immatable type이고, dictionary처럼 값에 대한 lable을 부여할 수 있다.

	from collections import namedtuple
    
    Book = namedtuple('Book', ['title', 'price'])
    mybook3 = Book("파이썬을 이용한 비트코인 자동 매매", 27000)
    mybook3_title = mybook3.title
    mybook_price = mybook3.price
profile
Soominlee

0개의 댓글