OS: MAC
참고: 👉 점프 투 파이썬 - 라이브러리 예제 바로가기
008. 앞뒤에서 자료를 넣고 빼려면? ― collections.deque(데크)
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | deque 사용 준비 | from collections import deque | |
| 기본 생성 | 리스트로 초기화 가능 | from collections import deque dq = deque([1, 2, 3]) print(dq) |
deque([1, 2, 3]) |
| 맨 뒤 추가 | append() | from collections import deque dq.append(4) print(dq) |
deque([1, 2, 3, 4]) |
| 맨 앞 추가 | appendleft() | from collections import deque dq.appendleft(0) print(dq) |
deque([0, 1, 2, 3, 4]) |
| 맨 뒤 제거 | pop() | from collections import deque ① dq.pop() ② dq.pop() print(dq) |
① 4 ② deque([0, 1, 2, 3]) |
| 맨 앞 제거 | popleft() | from collections import deque ① dq.popleft() ② dq.popleft() print(dq) |
① 0 ② deque([1, 2, 3]) |
| 큐(queue) 구조 (FIFO) | append()로 넣고 popleft()로 빼기 |
task = deque([]) task.append('A') task.popleft() |
'A' |
| 스택(stack) 구조 (LIFO) | append()로 넣고 pop()로 빼기 |
stack = deque([]) stack.append('A') stack.pop() |
'A' |
| 전체 초기화 | clear() | from collections import deque dq.clear() print(dq) |
deque([]) |
| 확장 (여러 값 추가) | extend() 또는 extendleft() |
① from collections import deque dq.extend([4,5]) print(dq) ② from collections import deque dq.extendleft([-1,0]) print(dq) |
① deque([4, 5]) ② deque([0, -1, 4, 5]) |
| 회전 (양수 → 오른쪽, 음수 → 왼쪽) |
rotate(n) | from collections import deque dq.rotate(1) print(dq) |
deque([5, 0, -1, 4]) |
| 최대 길이 제한 | deque(maxlen=n) | from collections import deque dq = deque([1,2,3], maxlen=3) dq.append(4) print(dq) |
deque([2, 3, 4], maxlen=3) # 환경에 따라 maxlen=3이 생략될 수도 있음. |
| 양쪽 삽입/삭제 성능 대량 데이터 처리 시 성능 차이 큼 양쪽 삽입/삭제가 잦다면 → deque 랜덤 인덱스 접근이 필요하다면 → list |
리스트보다 훨씬 빠름 (O(1)) | ① from collections import deque import time N = 100_000 # 10만 번 테스트 lst = [] start = time.time() for i in range(N): lst.insert(0, i) #맨 앞에 삽입 print(f"list insert(0, i): {time.time() - start:.4f}초") ② from collections import deque import time N = 100_000 dq = deque() start = time.time() for i in range(N): dq.appendleft(i) print(f"deque appendleft(i): {time.time() - start:.4f}초") |
① list insert(0, i): 38110초 ② deque appendleft(i): 0.0118초 |
라이브러리 예제 문제: 다음과 같이 시계방향으로 1~5가 적힌 다이얼이 있으며 현재 가리키는 눈금은 1이다. 이 다이얼을 시계방향으로 2칸 회전시켜 가리키는 눈금이 4가 되도록 하려면 어떻게 해야 할까?


009. 자료에 이름을 붙이려면? ― collections.namedtuple(네임드튜플)
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | namedtuple 사용 준비 | from collections import namedtuple | |
| 튜플 생성 | 구조체처럼 필드명 지정 | from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(10, 20) print(p) |
Point(x=10, y=20) # (p.x, p.y)불변 객체 |
| 필드 접근 | 이름으로 값 접근 | from collections import namedtuple Point = namedtuple('Point', ['x', 'y']) p = Point(10, 20) print(p.x, p.y) |
10 20 |
| 튜플 언패킹 | 튜플처럼 여러 변수로 분리 가능 | x, y = p print(x, y) |
10 20 |
| 딕셔너리 변환 | _asdict()로 변환 가능 | print(p._asdict()) | {'x': 10, 'y': 20} |
| 값 교체 | _replace()로 새 튜플 생성 | p2 = p._replace(y=99) print(p2) |
Point(x=10, y=99) |
라이브러리 예제 문제: 값이 아닌, 코드를 구하라.


010. 사용한 단어 개수를 구하려면? ― collections.Counter(카운터)
- Counter는 공백, 특수문자, 대소문자 구분을 그대로 유지. 즉 " "(공백)도 하나의 key로 카운트됨.
- lower()나 upper()로 바꾸면 대소문자 무시도 가능
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | Counter 사용 준비 | from collections import Counter | |
| 요소 개수 세기 | 리스트, 문자열 등에서 개수 자동 계산 |
from collections import Counter words = ['apple', 'banana', 'apple'] count = Counter(words) print(count) |
Counter({'apple': 2, 'banana': 1}) |
| 가장 많은 항목 | most_common()으로 상위 빈도 출력 | print(count.most_common(1)) | [('apple', 2)] |
| 딕셔너리처럼 접근 |
키로 직접 값 접근 가능 | print(count['banana']) | 1 |
| 요소 확장 | elements()로 각 요소 반복 |
print(list(count.elements())) | ['apple', 'apple', 'banana'] |
라이브러리 예제 문제: 다음은 김소월의 시 '산유화'이다. 이 시에서 가장 많이 사용한 단어와 그 개수를 구하려면 어떻게 해야 할까?
| 문제 | 코드 |
| 산에는 꽃 피네. 꽃이 피네. 갈 봄 여름없이 꽃이 피네. 산에 산에 피는 꽃은 저만치 혼자서 피어있네. 산에서 우는 새여 꽃이 좋아 산에서 사노라네. 산에는 꽃지네 꽃이 지네. 갈 봄 여름 없이 꽃이 지네. |
![]() 값: [('꽃이', 5)] |
011. 딕셔너리를 한 번에 초기화하려면? ― collections.defaultdict
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | defaultdict 사용 준비 | from collections import defaultdict | |
| 기본값 지정 | 없는 키 접근 시 자동 초기화 |
from collections import defaultdict dd = defaultdict(int) dd['apple'] += 1 dd['banana'] += 2 print(dd) |
defaultdict(<class 'int'>, {'apple': 1, 'banana': 2}) |
| 리스트 기본값 | list형 기본값 활용 | dd2 = defaultdict(list) dd2['fruit'].append('apple') print(dd2) |
defaultdict(<class 'list'>, {'fruit': ['apple']}) |
| set 기본값 | set형 기본값 활용 | dd3 = defaultdict(set) dd3['num'].add(10) print(dd3) |
defaultdict(<class 'set'>, {'num': {10}}) |
라이브러리 예제 문제: 사용한 문자(key)와 해당 문자의 사용 횟수(value)를 딕셔너리로 만들려면 어떻게 해야 할까?
| 문제 | ![]() |
| 풀이 | ![]() |
+ 순서를 유지하는 딕셔너리를 쓰려면? —collections.OrderedDict(오더드딕셔너리)
| 구분 | 설명 | 예제 | 결과 |
| 모듈 임포트 | OrderedDict 사용 준비 | from collections import OrderedDict | |
| 기본 생성 | 입력 순서가 유지되는 딕셔너리 |
od = OrderedDict() od['a']=1; od['b']=2; od['c']=3 print(od) |
OrderedDict([('a', 1), ('b', 2), ('c', 3)]) |
| 순서 변경 | move_to_end()으로 항목 재배치 |
od.move_to_end('a') print(od) |
OrderedDict([('b', 2), ('c', 3), ('a', 1)]) |
| 정렬 가능 | 정렬 후 다시 OrderedDict로 변환 |
od2 = OrderedDict(sorted(od.items())) print(od2) |
OrderedDict([('a',1), ('b',2), ('c',3)]) |
'미래 먹거리를 위하여' 카테고리의 다른 글
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기5 (맥OS 기준) (1) | 2025.11.07 |
|---|---|
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기4 (맥OS 기준) (0) | 2025.11.06 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기2 (맥OS 기준) (1) | 2025.11.04 |
| [파이썬 정복하기] 라이브러리 3장 - 다양한 데이터 다루기1 (맥OS 기준) (2) | 2025.11.03 |
| [파이썬 정복하기] 라이브러리 2장 - 바이너리 데이터 다루기(맥OS 기준) (1) | 2025.11.02 |


