728x90
반응형
Python의 collections
모듈: deque
와 Counter
로 데이터 관리 개선하기
Overview
Python의 collections
모듈은 데이터 구조와 관련된 다양한 유용한 도구를 제공합니다. 특히 deque
와 Counter
는 데이터 관리를 효율적으로 개선하는 데 도움을 줍니다. 이번 설명에서는 이 두 가지 클래스에 대해 깊이 파고들어 어떻게 사용되고 어떤 장점을 제공하는지 살펴보겠습니다.
deque
(Double-Ended Queue)
deque
는 양쪽 끝에서 빠르게 추가하거나 삭제할 수 있는 큐입니다. collections
모듈에서 제공하는 deque
는 다음과 같은 특징을 갖습니다:
- 양쪽 끝에서의 빠른 작업:
deque
는 리스트와 달리 양쪽 끝에서의 추가와 삭제가 O(1)의 시간 복잡도를 갖습니다. 이는 큐나 스택과 같은 데이터 구조를 효율적으로 구현할 때 유용합니다.
from collections import deque
d = deque([1, 2, 3])
d.append(4) # 오른쪽 끝에 4 추가
d.appendleft(0) # 왼쪽 끝에 0 추가
d.pop() # 오른쪽 끝의 4 제거
d.popleft() # 왼쪽 끝의 0 제거
- 회전 기능:
deque
는 요소를 회전시킬 수 있는 기능을 제공합니다. 예를 들어, 큐의 요소를 한쪽으로 돌리거나, 스택의 순서를 변경할 때 유용합니다.
d = deque([1, 2, 3, 4, 5])
d.rotate(2) # 오른쪽으로 2칸 회전
# 결과: deque([4, 5, 1, 2, 3])
d.rotate(-3) # 왼쪽으로 3칸 회전
# 결과: deque([1, 2, 3, 4, 5])
- 사용 예:
deque
는 웹 서버의 요청 큐, 로그 파일의 최근 항목 추적, 또는 간단한 작업 대기열을 관리하는 데 적합합니다.
import time
def task_queue():
queue = deque()
for i in range(5):
queue.append(f"Task {i}")
while queue:
task = queue.popleft()
print(f"Processing {task}")
time.sleep(1)
task_queue()
Counter
Counter
는 해시맵을 기반으로 하는 카운팅 도구로, 요소의 개수를 셀 때 유용합니다. collections
모듈에서 제공하는 Counter
는 다음과 같은 특징을 갖습니다:
- 자동 카운팅:
Counter
는 주어진 데이터의 요소 개수를 자동으로 계산하여 딕셔너리 형태로 반환합니다.
from collections import Counter
data = ['a', 'b', 'a', 'c', 'b', 'a']
count = Counter(data)
print(count) # Counter({'a': 3, 'b': 2, 'c': 1})
- 가장 흔한 요소 찾기:
Counter
는 가장 자주 나타나는 요소를 쉽게 찾을 수 있는 기능을 제공합니다.
most_common = count.most_common(1)
print(most_common) # [('a', 3)]
- 계산과 연산:
Counter
객체는 덧셈, 뺄셈, 교집합과 같은 다양한 연산을 지원합니다.
c1 = Counter(a=3, b=2)
c2 = Counter(a=1, b=2, c=1)
print(c1 + c2) # Counter({'a': 4, 'b': 4, 'c': 1})
print(c1 - c2) # Counter({'a': 2})
- 사용 예:
Counter
는 텍스트 분석, 데이터 통계, 빈도 분석 등에서 유용하게 사용됩니다.
from collections import Counter
import re
text = "This is a sample text with several words. This sample text is simple."
words = re.findall(r'\w+', text.lower())
word_count = Counter(words)
print(word_count) # Counter({'this': 2, 'sample': 2, 'text': 2, 'a': 1, 'with': 1, 'several': 1, 'words': 1, 'is': 1, 'simple': 1})
에러 처리 및 주의사항
deque
에러 처리:
- IndexError:
popleft()
나pop()
호출 시deque
가 비어 있으면IndexError
가 발생합니다.from collections import deque d = deque() try: d.popleft() except IndexError: print("Deque is empty!")
Counter
에러 처리:
- KeyError:
Counter
객체에서 존재하지 않는 키를 접근할 때 발생합니다. 하지만,Counter
는 존재하지 않는 키를 0으로 반환하므로 일반적으로 문제되지 않습니다.from collections import Counter count = Counter() print(count['nonexistent']) # 0
참고문서
위 문서들을 참고하여 deque
와 Counter
의 다양한 활용 방법을 더 깊이 이해하고 활용해보시기 바랍니다.
728x90
반응형
'Study Information Technology' 카테고리의 다른 글
파이썬의 abc 모듈을 통한 추상 베이스 클래스 이해하기 (1) | 2024.08.18 |
---|---|
Python의 hashlib 해싱 및 암호화 함수의 완벽한 안내 (1) | 2024.08.18 |
Python의 pdb 모듈로 인터랙티브 디버깅하기 (1) | 2024.08.18 |
Python의 threading 모듈로 병렬 작업 처리하기 (0) | 2024.08.18 |
Python의 functools 모듈과 lrucache를 활용한 고차 함수 최적화 (0) | 2024.08.18 |