파이썬의 collections 라이브러리는 유용한 자료구조를 제공하는 표준 라이브러리이다.
collections 라이브러리의 기능 중에서 코딩 테스트에서 유용하게 사용되는 클래스인 deque와 Counter를 정리해보자.
deque
파이썬에서는 deque를 사용해 큐를 구현한다. 별도로 제공되는 Queue 라이브러리가 있지만 일반적인 큐 자료구조를 구현하는 라이브러리가 아니기 때문에 주로 deque를 이용해 큐를 구현한다.
리스트 자료형과 deque를 비교하면 다음과 같다.
리스트 | deque | |
가장 앞쪽에 원소 추가 | O(N) | O(1) |
가장 뒤쪽에 원소 추가 | O(1) | O(1) |
가장 앞쪽 원소 제거 | O(N) | O(1) |
가장 뒤쪽 원소 제거 | O(1) | O(1) |
리스트 자료형은 원소를 추가 또는 제거할 때 각각 append() 메소드와 pop() 메소드를 사용한다. 하지만 이는 가장 뒤쪽 원소를 기준으로 수행되기 때문에 앞쪽에 있는 원소를 처리할 때에는 데이터의 개수에 따라서 많은 시간이 소요된다. 하지만 리스트 자료형은 인덱싱, 슬라이싱이 가능하여 중간에 원소를 삽입 또는 제거할 수 있다.
반면에 deque에서는 인덱싱, 슬라이싱이 불가능하기 때문에 중간에 원소를 삽입 또는 제거할 수 없다. 하지만 deque는 리스트와 다르게 appendleft() 메소드와 popleft() 메소드를 추가로 제공하여 첫 번째 원소를 다룰 때도 상수 시간에 처리할 수 있다.
Counter
Counter는 등장 횟수를 세는 기능을 제공한다. 리스트와 같은 iterable 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번씩 등장했는지를 알려준다. 따라서 원소별 등장 횟수를 세는 기능이 필요할 때 짧은 소스코드로 이를 구현할 수 있다.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) #'blue'가 등장한 횟수 출력
print(counter['green']) #'green'가 등장한 횟수 출력
print(dict(counter)) # 사전 자료형으로 출력
※ most_common 메소드
Counter 클래스의 most_common(n) 메소드는 가장 많이 등장한 n개의 원소를 리스트에 담긴 사전 자료형 형식으로 개수가 많은 순 정렬하여 리턴해주는 함수이다 (n을 생략하면 모든 원소를 추출한다). 반환된 형식은 [(원소, 개수)]이다.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue']).most_common()
print(counter)
print(counter[0][1]) # 최빈 원소의 개수 출력
참고자료: 이것이 취업을 위한 코딩 테스트다 with 파이썬 - 나동빈 지음(한빛미디어)
'Python > 파이썬 라이브러리' 카테고리의 다른 글
[파이썬 라이브러리] Numpy (0) | 2022.10.22 |
---|---|
[파이썬 라이브러리] bisect (0) | 2022.02.02 |
[파이썬 라이브러리] math (0) | 2021.12.30 |
[파이썬 라이브러리] itertools (0) | 2021.12.30 |
[파이썬 라이브러리] 내장 함수 (0) | 2021.12.29 |