본문 바로가기

Study Information Technology

Python의 collections 모듈 deque와 Counter로 데이터 관리 개선하기

728x90
반응형

Python의 collections 모듈: dequeCounter로 데이터 관리 개선하기

Overview

Python의 collections 모듈은 데이터 구조와 관련된 다양한 유용한 도구를 제공합니다. 특히 dequeCounter는 데이터 관리를 효율적으로 개선하는 데 도움을 줍니다. 이번 설명에서는 이 두 가지 클래스에 대해 깊이 파고들어 어떻게 사용되고 어떤 장점을 제공하는지 살펴보겠습니다.

deque (Double-Ended Queue)

deque는 양쪽 끝에서 빠르게 추가하거나 삭제할 수 있는 큐입니다. collections 모듈에서 제공하는 deque는 다음과 같은 특징을 갖습니다:

  1. 양쪽 끝에서의 빠른 작업: 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 제거
  1. 회전 기능: 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])
  1. 사용 예: 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는 다음과 같은 특징을 갖습니다:

  1. 자동 카운팅: Counter는 주어진 데이터의 요소 개수를 자동으로 계산하여 딕셔너리 형태로 반환합니다.
from collections import Counter

data = ['a', 'b', 'a', 'c', 'b', 'a']
count = Counter(data)
print(count)         # Counter({'a': 3, 'b': 2, 'c': 1})
  1. 가장 흔한 요소 찾기: Counter는 가장 자주 나타나는 요소를 쉽게 찾을 수 있는 기능을 제공합니다.
most_common = count.most_common(1)
print(most_common)   # [('a', 3)]
  1. 계산과 연산: 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})
  1. 사용 예: 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})

에러 처리 및 주의사항

  1. deque 에러 처리:
  • IndexError: popleft()pop() 호출 시 deque가 비어 있으면 IndexError가 발생합니다.
    from collections import deque
    d = deque()
    try:
    d.popleft()
    except IndexError:
    print("Deque is empty!")
  1. Counter 에러 처리:
  • KeyError: Counter 객체에서 존재하지 않는 키를 접근할 때 발생합니다. 하지만, Counter는 존재하지 않는 키를 0으로 반환하므로 일반적으로 문제되지 않습니다.
    from collections import Counter
    count = Counter()
    print(count['nonexistent'])  # 0

참고문서

위 문서들을 참고하여 dequeCounter의 다양한 활용 방법을 더 깊이 이해하고 활용해보시기 바랍니다.

728x90
반응형