[Python] Data Structure

Hyunwoo Lee·2022년 1월 19일
0

Data structure는 데이터를 효율적으로 저장하기 위한 구조이다.

Stack & Queue

Stack

  • 나중에 넣은 데이터를 먼저 반환하도록 선계된 메모리 구조
  • Last in First Out (LIFO)
  • Data의 입력을 Push, 출력을 Pop이라고 함
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a.append(5)
>>> a.pop()
5
>>> a
[1, 2, 3, 4]

Queue

  • 먼저 넣은 데이터를 먼저 반환하도록 설계된 메모리 구조
  • First in First Out(FIFO)
>>> a = [1, 2, 3]
>>> a.append(4)
>>> a.append(5)
>>> a.pop(0)
1
>>> a.pop(0)
2

stack은 pop()을 이용해 데이터를 반환하지만
queue는 pop(0)를 이용해 데이터를 반환받아야함.

Tuple & Set

Tuple

  • 값의 변경이 불가능한 리스트
  • 선언시 "[]"가 아닌 "()"를 사용
  • 리스트의 연산, 인덱신, 슬라이싱 등을 동일하게 사용가능
  • 변경을 하면 안되는 데이터 저장에 사용
t = (1) #정수로 인식
tu = (1, ) # 이렇게 작성해야한다.

Set

  • 값을 순서 없이 저장.
  • 중복 불허
  • set 객체 선언을 이용하여 객체 생성
s1 = set([1, 2, 3, 4)
s2 = {1, 2, 3, 4} # 두가지 방법 모두 가능
s1.add(1) # 1추가
s1.remove(2) # 2 삭제
s2.updata([5, 2, 1]) # 여러개 추가
s2.discard(5) #5 삭제
s2.clear() #모든 원소 삭제

이외에도 set은 다양한 집합 연산을 지원한다.

s1.union(s2)
s1 | s2
s1.intersection(s2)
s1 & s2
s1.difference(s2)
s1 - s2

Dictionary

  • 데이터(value)를 저장할 때 구분 지을 수 있는 값(key)를 함께 저장
  • key 값을 활용하여 value값을 관리
  • dict = {key:value} 형식
dict = {"go": "가다", "home": "집"}
dict["hello"] = "안녕"
dict["bye"] = "잘가"
"hello" in dict.keys()
"집" in dict.values()

Collection module

  • List, Tuple, Dict에 대한 Python Built-in 확장 자료구조(모듈)
  • 편의성, 실행 효율 등을 사용자에게 제공함

Deque

  • stack과 queue를 지원하는 모듈
  • List에 비해 빠른 자료 저장 방식을 지원
  • rotate, reverse등 연결리스트의 특성을 지원함
  • 기존 list형태의 함수를 모두 지원함
from collections import deque

deque_list = deque()
deque_list.appendleft(10)
deque_list.rotate(1)
deque_list.extend([6, 3])
deque_list.extendleft([11, 33])

jupyter notebook에서 %timeit 함수명()을 이용하면 쉽게 시간을 측정할 수 있다.

Defaultdict

  • dict type의 값에 기본 값을 지정.
from collections import defaultdict

d = defaultdict(lambda : 0)
print(d["hello"]) # 0

text = "fdas gfjo jfods jflds fjowe fjowe fjeow feowu sfds."
word = text.split()
for word in text:
	d[[word] += 1

이런 식으로 단어의 출현 빈도를 세는데 사용할 수도 있다.

Counter

  • Sequence type의 data element 들의 갯수를 dict 형태로 반환
  • 자주 사용하진 않음
from collections import Counter

C = Counter(["B", "S", "S", "B", "S"])
# {"B":2, "S":3}

namedtuple

  • Tuple 형태로 data 구조체를 저장하는 방법
  • 저장되는 data의 variable을 사전에 지정해서 저장함
from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(x=11, y=22)
print(p[0] + p[1])
profile
10분만 쉬어요

0개의 댓글