<NAVER boostcourse>
에서 수강한 강의를 바탕으로 정리한 내용입니다.Python의 기본 자료형에서 나아가 특징을 가지는 자료들을 다룰 수 있는 python data structure에 대해 다룬다.
파이썬 기본 데이터 구조
: 나중에 넣은 데이터를 먼저 반환하도록(LIFO, last in first out) 설계된 메모리 구조
ex) 택배 화물차의 물건 데이터를 다룰 때 사용할 수 있다.
: 먼저 넣은 데이터를 먼저 반환하도록(FIFO, first in first out) 설계된 메모리 구조
: 값의 변경이 불가능한 리스트로, 선언 시 ()
를 사용한다.
리스트의 연산, 인덱싱, 슬라이스 등 모두 사용 가능함.
값이 하나인 tuple은 반드시 ,
를 붙여야 함 t=(1,)
붙이지 않는 경우 하나의 값으로 인식됨
Tuple을 사용하는 경우
프로그램을 작동하는 동안 변경되지 않아야 하는 데이터를 저장
함수의 반환 값 등 사용자의 실수에 의한 에러를 사전에 방지하기 위함
: 값을 순서 없이 저장하는 자료구조, 중복을 불허한다.
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
: 데이터를 저장할 때 key와 value를 함께 저장하는 자료 구조
*다른 언어에서는 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 값들 출력
: 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에 비해 효율적인 자료 저장 방식을 지원함
OrderedDict
: Dictionary와 달리, 데이터를 입력한 순서대로 dict을 반환함
defualtdict
: Dict type의 값에 기본 값을 지정함으로써, 신규 값 생성 시 지정 값이 없을 때 defutl값을 사용하기 위함
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']
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})
# 교집합 합집합 + 연산 모두 지원
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