Python 컬렉션 모듈: 고급 컨테이너 유형

Python의 컬렉션 모듈을 사용하는 방법을 알아보세요. 마스터 카운터, defaultdict, namestuple, deque 및 복잡한 데이터 구조를 단순화하는 방법.

에디터에서 사용해 보세요

개요

Python의 기본 컨테이너(목록, 사전, 집합, 튜플)는 대부분의 작업에 충분하지만 복잡한 프로그램에는 특수한 데이터 구조가 필요한 경우가 많습니다. 이 문제를 해결하기 위해 Python은 내장된 '컬렉션' 모듈을 제공합니다. 이 모듈에는 일반적인 프로그래밍 작업을 보다 효율적으로, 보다 명확하고 자체 문서화되는 구문으로 해결하도록 설계된 고성능 컨테이너 데이터 유형이 포함되어 있습니다.

가장 유용한 클래스 중에는 `defaultdict`가 있는데, 이는 일반 사전처럼 작동하지만 누락된 키를 기본값(예: 빈 목록 또는 정수 0)으로 자동 초기화하여 자세한 키 검사가 필요하지 않습니다. 또 다른 강력한 기능은 'Counter' 클래스로, 특히 반복 가능 항목의 항목 발생을 집계하는 데 최적화되어 있습니다. 빠른 큐 및 스택의 경우 `deque`(양단 큐)는 `O(N)` 시프트로 인해 어려움을 겪는 목록과 달리 양쪽 끝에서 `O(1)` 삽입 및 삭제를 제공합니다.

마지막으로 모듈은 점 표기법과 전통적인 인덱스(예: `point[0]` 대신 `point.x`)를 사용하여 액세스할 수 있는 경량의 튜플과 유사한 객체를 생성하는 `namedtuple`을 제공합니다. 이는 클래스의 가독성과 함께 튜플의 속도와 불변성을 제공합니다. 컬렉션 모듈을 작업 흐름에 통합하면 코드가 우아하고 성능이 뛰어나며 깔끔한 상태로 유지됩니다.

코드 및 실행 출력

Counter를 사용하여 단어 수를 계산하고 defaultdict를 사용하여 사전 그룹을 구성합니다.

from collections import Counter, defaultdict, namedtuple

# 1. Counter: Tallying items
votes = ["yes", "no", "yes", "yes", "no"]
vote_counts = Counter(votes)
print(f"Vote Counts: {vote_counts}")
print(f"Most common: {vote_counts.most_common(1)}")

# 2. defaultdict: Grouping values
grouped_data = defaultdict(list)
grouped_data["engineers"].append("Alice")
grouped_data["engineers"].append("Bob")
print(f"Grouped Data: {dict(grouped_data)}")

# 3. namedtuple: Clean records
Point = namedtuple("Point", ["x", "y"])
p = Point(10, 20)
print(f"Point x: {p.x}, Point y: {p.y}")
터미널 출력
Vote Counts: Counter({'yes': 3, 'no': 2})
Most common: [('yes', 3)]
Grouped Data: {'engineers': ['Alice', 'Bob']}
Point x: 10, Point y: 20

단계별 구현

  • 카운터를 통해 로그 파일을 분석하여 오류 발생 횟수 계산
  • deque를 사용하여 우선순위 큐 또는 작업 스케줄러 구축
  • 네임드튜플을 사용하여 좌표 차원 또는 데이터 레코드 표현

자주 묻는 질문

대기열 작업에서 deque가 목록보다 빠른 이유는 무엇입니까?

목록에서는 맨 앞에서 삽입하거나 삭제할 때(O(N)) 메모리의 모든 후속 요소를 이동해야 합니다. deque는 이중 연결 리스트로 구현되어 양쪽 끝에서 O(1) 연산을 허용합니다.

네임드튜플의 요소를 변경할 수 있나요?

아니요. 네임드 튜플은 표준 튜플을 상속하므로 완전히 불변입니다. 수정된 새 인스턴스를 반환하려면 ._replace() 메서드를 사용해야 합니다.

관련 주제

권장 Python 리소스

관련 대화형 튜토리얼, 치트 시트, 코드 비교를 통해 지식을 확장하세요.