본문 바로가기
Python/python 기초

파이썬의 collections 모듈: 데이터 구조를 더 쉽게 다루기

by 철이88 2023. 4. 25.
반응형

파이썬에서는 collections 모듈을 사용하여 리스트, 튜플, 딕셔너리 등과 같은 데이터 구조를 더 쉽게 다룰 수 있습니다. 이 모듈은 기본적인 내장 모듈로 따로 설치가 필요하지 않습니다. 이번 글에서는 collections 모듈의 유용한 다섯 가지 클래스, namedtuple, deque, defaultdict, Counter, OrderedDict에 대해 알아보겠습니다.

 

Collection module에서 제공하는 클래스는 다음과 같이 import 하여 사용할 수 있습니다.

from collections import 클래스명

 

1. namedtuple

namedtuple은 튜플을 생성할 때 인덱스로만 접근하는 것 대신 이름으로 접근할 수 있도록 해주는 클래스입니다. 이 클래스를 사용하면 코드의 이해하는데 도움이 됩니다. 예를 들어, 좌표를 저장하는 튜플을 생성할 때, 다음과 같이 사용할 수 있습니다.

from collections import namedtuple

Point = namedtuple('Point', ['x', 'y'])
p = Point(1, 2)
print(p.x, p.y)  #출력결과 '1 2'

 

2. deque

deque는 스택(Stack)이나 큐(Queue)와 같은 자료구조를 구현하는 데 사용되는 클래스입니다. 여기서 스택과 큐는 컴퓨터 과학에서 자주 사용되는 추상 자료 구조를 의미입니다. 이 클래스를 사용하면 연산 시간을 더욱 효율적으로 사용할 수 있습니다. 예를 들어, 다음과 같이 deque를 사용하여 큐를 구현할 수 있습니다.

from collections import deque

q = deque()
q.append(1)
q.append(2)
q.append(3)
print(q.popleft())  # 출력결과 '1'
print(q) #출력결과 1이 제거 되어 'deque([2, 3])'

위에서 popleft()는 deque 메소드 중 하나로, 큐의 가장 왼쪽 요소를 출력하고, 해당 요소를 큐에서 삭제하는 코드입니다.

 

3. defaultdict

defaultdict는 딕셔너리의 기본값을 설정해 놓고 사용할 수 있는 클래스입니다. 딕셔너리에서 존재하지 않는 키를 참조할 경우 KeyError가 발생하는 것 대신, 기본값을 반환합니다. 이 클래스를 사용하면 코드를 더욱 간결하게 만들 수 있습니다. 예를 들어, 다음과 같이 defaultdict를 사용하여 딕셔너리를 초기화할 수 있습니다.

from collections import defaultdict

d = defaultdict(int)
d['a'] += 1
d['b'] += 1
print(d['a'], d['b'], d['c'])  # 출력결과 '1 1 0'

위 예에서 딕셔너리에 'c' 키가 존재하지 않아도, d ['c']를 호출하면 디폴트 값인 0을 반환하도록 설정되어 있습니다. 

 

4. Counter

Counter 클래스는 시퀀스(리스트, 튜플 등)에서 각 요소가 몇 번 등장했는지를 셀 수 있는 클래스입니다. Counter 클래스는 딕셔너리 형태로 요소와 등장 횟수를 저장합니다. 이 클래스는 collections 모듈의 가장 대표적인 클래스 중 하나로, 데이터의 출현 빈도를 쉽게 계산할 수 있습니다.

예를 들어, 아래와 같이 과일 이름 리스트가 있다고 가정하겠습니다.

이 리스트의 요소들이 몇 번씩 등장하는지를 셀 때, Counter 클래스를 사용하면 아래와 같이 간단하게 구할 수 있습니다.

from collections import Counter

fruits = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']

cnt = Counter(fruits)
print(cnt)  # 출력결과 'Counter({'apple': 3, 'banana': 2, 'orange': 1})'

 

5. OrderedDict

OrderedDict 클래스는 딕셔너리를 상속받은 클래스로, 키-값 쌍의 추가 순서를 기억합니다. 일반적인 딕셔너리는 키-값 쌍을 추가한 순서를 기억하지 않습니다. 그러나 OrderedDict 클래스는 추가한 순서를 기억하기 때문에, 아래의 예제에서는 키-값 쌍의 추가 순서대로 출력됩니다.

from collections import OrderedDict

od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3

print(od)  # 출력결과 'OrderedDict([('a', 1), ('b', 2), ('c', 3)])'
반응형

댓글