프로그래밍/Python

[Python 강의] 11강 - 고급 데이터 구조

월횽 2024. 10. 14. 06:30
728x90
반응형
SMALL

안녕하세요! 그레이 해커 월횽입니다. 오늘은 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)을 구현할 때 유용합니다.

728x90
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는 리스트나 문자열에서 데이터의 빈도수를 쉽게 셀 수 있는 데이터 구조입니다. 데이터 분석이나 통계 작업에서 유용하게 쓰입니다.

SMALL
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에서 활용할 수 있는 고급 기법에 대해 배워보겠습니다!

 

 

 

 

 

- 이전 수업 목록

 

 

 

 

 

 

 

 

 

728x90
반응형
LIST