컬렉션 모듈로 Python 자료구조 다채롭게 활용하기
Python은 다양한 자료구조를 제공하여 프로그래밍에서 필요한 데이터를 효율적으로 다룰 수 있게 해줍니다. 기본적으로 리스트, 튜플, 세트, 딕셔너리와 같은 자료구조가 있지만, 파이썬의 컬렉션(ccollections) 모듈을 이용하면 더욱 다채로운 자료구조를 사용할 수 있습니다. 이 글에서는 컬렉션 모듈의 주요 기능과 사용법을 초보자도 쉽게 이해할 수 있도록 설명하겠습니다.
컬렉션 모듈 소개
컬렉션 모듈은 Python의 표준 라이브러리로, 일반적인 내장 자료구조 외에 추가적인 자료구조를 제공합니다. 이 모듈은 collections라는 이름으로 불리며, 데이터 관리를 위한 다양한 도구들을 포함하고 있습니다. 주요 클래스는 다음과 같습니다.
- Counter: 항목의 개수를 세어주는 클래스
- deque: 양쪽 끝에서 빠르게 추가하고 삭제할 수 있는 리스트
- defaultdict: 기본값을 설정할 수 있는 딕셔너리
- OrderedDict: 입력 순서를 기억하는 딕셔너리
- namedtuple: 튜플의 확장으로 필드를 갖는 객체처럼 사용할 수 있음
Counter 클래스
Counter 클래스란?
Counter 클래스는 객체의 개수를 셀 때 유용합니다. 리스트나 문자열과 같은 반복 가능한(iterable) 객체를 인수로 받아 각 항목의 개수를 세어주는 딕셔너리와 유사한 객체를 생성합니다.
Counter 클래스 사용법
Counter 클래스를 사용하려면 먼저 컬렉션 모듈에서 가져와야 합니다. 아래의 예시를 통해 Counter의 사용법을 알아보겠습니다.
from collections import Counter
리스트의 항목 개수를 세어보겠습니다.
my_list = ['apple', 'banana', 'apple', 'orange', 'banana', 'apple']
counter = Counter(my_list)
print(counter)
위 코드는 다음과 같은 출력 결과를 보여줍니다.
Counter({'apple': 3, 'banana': 2, 'orange': 1})
Counter의 주요 메서드
- most_common(n): n개 가장 많이 등장한 항목을 반환합니다.
- elements(): 개수에 따라 항목을 반복하여 반환합니다.
deque 클래스
deque 클래스란?
deque(덱)는 double-ended queue의 약자로, 양쪽 끝에서 데이터를 추가하거나 삭제할 수 있는 자료구조입니다. 리스트보다 더 빠른 성능을 제공합니다.
deque 클래스 사용법
deque를 사용하기 위해서 먼저 가져온 후 사용할 수 있습니다.
from collections import deque
deque를 생성하고, 데이터 추가 및 삭제 예시를 살펴보겠습니다.
my_deque = deque()
my_deque.append('first')
뒤에서 추가
my_deque.appendleft('zero')
앞에서 추가
print(my_deque)
my_deque.pop()
뒤에서 삭제
my_deque.popleft()
앞에서 삭제
print(my_deque)
위 코드는 다음과 같은 결과를 출력합니다.
deque(['zero', 'first'])
deque([])
deque의 주요 메서드
- append(x): 뒤에 x를 추가합니다.
- appendleft(x): 앞에 x를 추가합니다.
- pop(): 뒤에서 요소를 제거하고 반환합니다.
- popleft(): 앞에서 요소를 제거하고 반환합니다.
defaultdict 클래스
defaultdict란?
defaultdict는 일반 딕셔너리와 유사하지만, 지정된 기본값을 갖는 새로운 키를 생성할 때 유용합니다. 기본값의 생성 로직은 함수로 제공됩니다.
defaultdict 사용법
defaultdict를 사용하려면 먼저 가져온 후 사용할 수 있습니다.
from collections import defaultdict
아래의 예제에서는 정수 기본값을 사용하는 defaultdict를 생성해보겠습니다.
my_defaultdict = defaultdict(int)
기본값은 0
my_defaultdict['apple'] += 1
my_defaultdict['banana'] += 2
print(my_defaultdict)
위 코드는 다음과 같은 출력 결과를 보여줍니다.
defaultdict(<class 'int'>, {'apple': 1, 'banana': 2})
defaultdict의 유용한 사용 예제
defaultdict는 카운트나 그룹화를 위한 자료구조로 자주 사용됩니다. 예를 들어 문자열에서 단어의 출현 횟수를 세어보는 예시를 살펴보겠습니다.
sentence = "hello world hello"
word_count = defaultdict(int)
for word in sentence.split():
word_count[word] += 1
print(word_count)
결과는 다음과 같습니다.
defaultdict(<class 'int'>, {'hello': 2, 'world': 1})
OrderedDict 클래스
OrderedDict란?
OrderedDict는 입력한 순서를 기억하는 딕셔너리입니다. Python 3.7부터는 기본 딕셔너리도 입력 순서를 유지하지만, OrderedDict는 추가적인 기능을 제공합니다.
OrderedDict 사용법
OrderedDict를 사용하려면 먼저 가져와야 합니다.
from collections import OrderedDict
OrderedDict의 사용 예시를 살펴보겠습니다.
myordereddict = OrderedDict()
myordereddict['banana'] = 1
myordereddict['apple'] = 2
myordereddict['orange'] = 3
print(myordereddict)
출력 결과는 다음과 같습니다.
OrderedDict([('banana', 1), ('apple', 2), ('orange', 3)])
OrderedDict의 주요 메서드
- movetoend(key): 지정한 키를 끝으로 이동시킵니다.
- popitem(last=True): 마지막 항목을 제거하고 반환합니다.
namedtuple 클래스
namedtuple이란?
namedtuple은 튜플의 확장으로, 필드를 명명할 수 있는 특별한 튜플입니다. 일반 튜플보다 가독성이 뛰어나고, 각 필드를 쉽게 접근할 수 있습니다.
namedtuple 사용법
namedtuple을 사용하기 위해서는 collections 모듈에서 해당 클래스를 가져와야 합니다.
from collections import namedtuple
사용 예시는 다음과 같습니다.
Point = namedtuple('Point', ['x', 'y'])
p = Point(10, 20)
print(p.x, p.y)
위 코드의 출력 결과는 다음과 같습니다.
10 20
namedtuple의 장점
- 가독성 증가: 필드를 이름으로 접근할 수 있어 가독성이 좋아집니다.
- 불변성 유지: 튜플처럼 불변 객체로서 안정성을 제공합니다.
컬렉션 모듈 활용 예제
이제까지 소개한 컬렉션 모듈의 클래스들을 활용하여 실제로 다양한 문제를 해결해보겠습니다.
단어 빈도수 계산
이전의 Counter를 활용하여 세 문장 내에서의 단어 빈도수를 계산하는 예시입니다.
from collections import Counter
text = "나도 프로그래밍을 좋아하고 파이썬을 배워가고 있어요. 파이썬은 재미있습니다."
words = text.split()
word_count = Counter(words)
print(wordcount.mostcommon())
덱을 활용한 대기열 관리
deque를 사용하여 대기열을 관리하는 예제를 알아보겠습니다.
from collections import deque
waiting_queue = deque()
대기열에 사람 추가
waiting_queue.append('사람1')
waiting_queue.append('사람2')
대기열에서 사람 서비스
currentperson = waitingqueue.popleft()
print(current_person + '이 서비스되었습니다.')
결론
이번 글에서는 Python의 컬렉션 모듈을 통해 제공되는 다양한 자료구조와 그 활용법에 대해 살펴보았습니다. 컬렉션 모듈을 사용하면 데이터 관리가 더욱 효율적이고 간편해집니다. 앞으로 Python을 사용하여 복잡한 데이터를 다룰 때 이번에 배운 내용을 잘 활용하길 바랍니다.





