<청춘> 격정적으로 사는 것

밤을 새고 공부한 다음 날 새벽에 느꼈던 생생한 환희와 야생적인 즐거움을 잊을 수 없다

파이썬 Python

[파이썬 Python] collections 라이브러리 / deque / Counter

수학도 2021. 5. 27. 16:02

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년