(Machine) 4. Data Structure - Collections

2 분 소요

1. 학습 목표

tuple, dict 에 대한 확장 데이터 구조를 제공하는 Collections 안에 포함된 모듈을 이용하여 Data Sturcture 의 기본 개념을 이해하고 사용하는 방법을 알아봅니다.

2. Collections

  • List, Tuple, Dict에 대한 Python Built-in 확장 자료 구조(모듈)
  • 편의성, 실행 효율 등을 사용자에게 제공함
  • 아래 모듈이 존재함
    from collections import deque
    from collections import Counter
    from collections import OrderedDict
    from collections import defaultdict
    from collections import namedtuple
    

1) deque

  • Stack과 Queue를 지원하는 모듈
  • List에 비해 효율적인 자료 저장 방식을 지원함
  • rotate, reverse등 Linked List의 특성을 지원함
  • 기존 list 형태의 함수를 모두 지원함
  • deque는 기존 list보다 효율적인 자료구조를 제공
  • 효율적 메모리 구조로 처리 속도 향상

deque 코드 예제

# 기본코드
from collections import deque

deque_list = deque()
for i in range(5):
    deque_list.append(i)
print(deque_list)

deque_list.appendleft(10)
print(deque_list)

# =======출력 값 ======
# deque([0, 1, 2, 3, 4])
# deque([10, 0, 1, 2, 3, 4])
deque_list = deque()
for i in range(5):
    deque_list.append(i)

# rotate 활용 코드
deque_list.rotate(2)
print(deque_list)
# =======출력 값 ======
# deque([3, 4, 0, 1, 2])

# reversed 활용 코드
deque(reversed(deque_list))
# =======출력 값 ======
# deque([4, 3, 2, 1, 0])

2) OrderedDict

  • Dict와 달리, 데이터를 입력한 순서대로 dict를 반환함
  • Dict type의 값을, vlue 또는 key 값으로 정렬할 때 사용 가능

OrderedDict 코드 예제

####### 기본코드
from collections import OrderedDict
d = OrderedDict()
d['x'] = 100
d['y'] = 200
d['z'] = 300
d['l'] = 500

for k, v in d.items():
    print(k, v)
# =======출력 값 ======
# x 100
# y 200
# z 300
# l 500

####### key 값으로 정렬한 예 
#######                                                 t[0]은 key값을 의미 t[1]은 value값을 의미함
for k, v in OrderedDict(sorted(d.items(), key=lambda t: t[0])).items():
    print(k,v)

# =======출력 값 ======
# l 500
# x 100
# y 200
# z 300

3) defaultdict

  • Dict type의 값에 기본 값을 지정, 신규값 생성시 사용하는 방법

defaultdict 코드 예제

####### 기본코드
from collections import defaultdict
d = defaultdict(object) # Default dictionary를 생성
d = defaultdict(lambda: 0) # Default 값을 0으로 설정한다.
print(d["first"])
####### 글자의 수를 세는 프로그램 
from collections import OrderedDict
from collections import defaultdict
text = """Code navigation is available!
Navigate your code with ease. Click on function and method calls to jump to their definitions or references in the same repository. Learn more""".lower().split()
print(text)

### (defaultdict를 사용하면 key가 있는지 없는지 비교할 로직 필요없이 바로 count가 가능하다)
word_count = defaultdict(object)
word_count = defaultdict(lambda: 0)
for word in text:
    word_count[word] += 1
print(word_count)
for i, v in OrderedDict(sorted(
    word_count.items(), key=lambda t: t[1], reverse=True)).items():
    print(i, v)

4) Counter

  • Sequence tpye의 data element들의 갯수를 dict 형태로 반환 한다.

Counter 코드 예제

####### 기본코드
from collections import Counter
c = Counter() # 빈객체 생성..
c = Counter('gallahad')  
print(c)
# =======출력 값 ======
# Counter({'a': 3, 'l': 2, 'g': 1, 'h': 1, 'd': 1})

5) namedtuple

  • Tuple 형태로 Data 구조체를 저장하는 방법
  • 저장되는 data의 variable을 사전에 지정해서 저장함
####### 기본코드
from collections import namedtuple
Point = namedtuple('Point',['x','y'])
p = Point(11, y=22)
print(p[0] + p[1])

댓글남기기