collections
collections 라이브러리는 유용한 자료구조를 제공하는 표준 라이브러리다.
- 표준 라이브러리 : 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리
대표적으로 deque, Counter 클래스가 포함되어 있다.
deque
파이썬에서는 Queue 라이브러리가 아닌 deque를 사용해 큐를 구현한다.
deque 는 스택과 큐의 장점을 모두 채택한 것이라, 데이터 삽입/삭제 속도가 리스트 자료형에 비해 효율적이며 queue 라이브러리를 이용하는 것보다 더 간단하기 때문이다.
- 리스트 자료형 : 데이터 삽입/삭제 시 '가장 뒤쪽 원소'를 기준으로 수행하므로 리스트 앞쪽에 있는 원소를 삭제하거나 앞쪽에 새 원소를 삽입할 때 많은 시간이 소요됨
시간복잡도 비교 | 리스트 | deque |
가장 앞쪽에 데이터 삽입 | O(N) | O(1) |
가장 뒤쪽에 데이터 삽입 | O(1) | O(1) |
가장 앞쪽에 있는 데이터 삭제 | O(N) | O(1) |
가장 뒤쪽에 있는 데이터 삭제 | O(1) | O(1) |
단, deque 에서는 인덱싱, 슬라이싱 등의 기능은 사용할 수 없다.
deque 함수
popleft() : 첫 번째 데이터 삭제
pop() : 마지막 데이터 삭제
appendleft(x) : 첫 번째 인덱스에 데이터 x를 삽입
append() : 마지막 인덱스에 데이터 x를 삽입
deque를 큐로 활용할 때 : 선입선출
데이터 삽입 : append()
데이터 삭제 : popleft()
deque를 스택으로 활용할 때 : 후입선출
데이터 삽입 : append()
데이터 삭제 : pop()
from collections import deque
data = deque([2, 3, 4])
data.appendleft(1)
print(data)
data.append(5)
print(data)
data.popleft()
print(data)
data.pop()
print(data)
# deque 자료구조를 리스트 자료형으로 변환
print(list(data))
# print 결과
deque([1, 2, 3, 4])
deque([1, 2, 3, 4, 5])
deque([2, 3, 4, 5])
deque([2, 3, 4])
[2, 3, 4]
Counter
Counter 는 등장 횟수를 세는 기능을 제공한다.
from collections import Counter
# 문자열
data = Counter('hello wolrd')
print(data)
# 리스트
data = Counter(['1', '2', '2', '3', '3', '3'])
print(data) # 등장횟수가 많은 데이터부터 출력
print(data['1'])
print(data['3'])
print(data['0']) # 등장하지 않는 원소는 0 으로 출력
print(dict(data)) # 사전순으로 출력
# print 결과
Counter({'l': 3, 'o': 2, 'h': 1, 'e': 1, ' ': 1, 'w': 1, 'r': 1, 'd': 1})
Counter({'3': 3, '2': 2, '1': 1})
1
3
0
{'1': 1, '2': 2, '3': 3}
출처
나동빈, 『이것이 취업을 위한 코딩테스트다 with 파이썬』, 한빛미디어(주), 2020년