안녕하세요! 그레이 해커 월횽입니다. 오늘은 Python의 고급 데이터 구조에 대해 알아보겠습니다. Python은 기본적으로 리스트, 딕셔너리, 튜플, 세트 같은 데이터 구조를 제공하지만, 좀 더 복잡한 문제를 해결하기 위해 collections 모듈에서 제공하는 다양한 고급 데이터 구조도 사용할 수 있습니다.
1. collections 모듈 소개
Python의 collections 모듈은 리스트나 딕셔너리처럼 자주 쓰는 데이터 구조의 확장형들을 제공합니다. 이 모듈을 활용하면 효율적인 자료 관리와 더 나은 성능을 얻을 수 있습니다.
주요 데이터 구조
· namedtuple
· deque
· Counter
· defaultdict
· OrderedDict
2. namedtuple: 이름이 있는 튜플
namedtuple은 튜플처럼 동작하지만, 인덱스가 아닌 이름으로도 데이터에 접근할 수 있습니다. 코드의 가독성을 높이고 명확하게 데이터를 다룰 수 있습니다.
from collections import namedtuple
# 학생 정보를 저장하는 namedtuple
Student = namedtuple('Student', ['name', 'age', 'grade'])
# 학생 객체 생성
student1 = Student(name="wolhyong", age=30, grade="A")
print(student1.name) # wolhyong 출력
print(student1.age) # 30 출력
3. deque: 양방향 큐
deque는 리스트와 비슷하지만, 양방향으로 데이터를 추가하거나 삭제하는 데 최적화된 자료 구조입니다. 큐(queue)나 스택(stack)을 구현할 때 유용합니다.
from collections import deque
# deque 생성
dq = deque([1, 2, 3])
# 양쪽에서 데이터 추가 및 제거
dq.append(4) # 오른쪽에 4 추가
dq.appendleft(0) # 왼쪽에 0 추가
dq.pop() # 오른쪽에서 데이터 제거
dq.popleft() # 왼쪽에서 데이터 제거
print(dq) # deque([1, 2, 3]) 출력
4. Counter: 데이터 개수 세기
Counter는 리스트나 문자열에서 데이터의 빈도수를 쉽게 셀 수 있는 데이터 구조입니다. 데이터 분석이나 통계 작업에서 유용하게 쓰입니다.
from collections import Counter
# 문자열 내 각 문자 빈도수 계산
counter = Counter("hello world")
print(counter) # {'l': 3, 'o': 2, 'h': 1, ...} 출력
# 리스트 내 요소 빈도수 계산
counter = Counter([1, 2, 2, 3, 3, 3])
print(counter) # {3: 3, 2: 2, 1: 1} 출력
5. defaultdict: 기본값이 있는 딕셔너리
defaultdict는 일반 딕셔너리와 비슷하지만, 존재하지 않는 키를 조회할 때 기본값을 자동으로 반환하도록 설정할 수 있습니다. 반복문에서 딕셔너리의 키를 처음 추가할 때 유용하게 사용할 수 있습니다.
from collections import defaultdict
# 리스트를 기본값으로 갖는 defaultdict 생성
dd = defaultdict(list)
# 존재하지 않는 키에 접근 시 자동으로 빈 리스트가 생성됨
dd['a'].append(1)
dd['b'].append(2)
print(dd) # {'a': [1], 'b': [2]} 출력
6. OrderedDict: 순서를 기억하는 딕셔너리
OrderedDict는 딕셔너리와 비슷하지만, 데이터 입력 순서를 기억합니다. 일반 딕셔너리는 Python 3.7 이후로 입력 순서를 보장하지만, 이전 버전이나 명시적으로 순서를 다루고 싶을 때 유용합니다.
from collections import OrderedDict
# OrderedDict 생성
od = OrderedDict()
od['a'] = 1
od['b'] = 2
od['c'] = 3
print(od) # OrderedDict([('a', 1), ('b', 2), ('c', 3)]) 출력
7. 기타 고급 데이터 구조
Python에는 collections 외에도 heapq와 bisect 같은 모듈을 통해 고급 데이터 구조를 지원합니다. 이들은 정렬된 리스트나 우선순위 큐 등을 쉽게 구현할 수 있습니다.
8. 고급 데이터 구조 정리
· namedtuple: 이름으로 값에 접근할 수 있는 튜플
· deque: 양방향으로 데이터 추가 및 삭제가 가능한 자료 구조
· Counter: 데이터의 빈도수를 계산하는 자료 구조
· defaultdict: 기본값을 갖는 딕셔너리
· OrderedDict: 입력 순서를 기억하는 딕셔너리
다음 시간에는 Python에서 활용할 수 있는 고급 기법에 대해 배워보겠습니다!
- 이전 수업 목록
'프로그래밍 > Python' 카테고리의 다른 글
[Python 강의] 13강 - 테스트와 디버깅 기법 (1) | 2024.10.16 |
---|---|
[Python 강의] 12강 - 고급 기법 (2) | 2024.10.15 |
[Python 강의] 10강 - 라이브러리(Library) (1) | 2024.10.11 |
[Python 강의] 9강 - 모듈과 패키지 (1) | 2024.10.10 |
[Python 강의] 8강 - 객체지향 프로그래밍 (Object-Oriented Programming) (0) | 2024.10.09 |