본문 바로가기
개인 공부/코딩테스트

자주 쓰이는 Python Library 모음 및 기법:: seoftware

by seowit 2021. 6. 4.

 

코딩테스트 할 때, 자주 사용하는 라이브러리를 정리해봤습니다
 

 

from collections import deque

: BFS 문제 풀 때 사용, 데이터 출입이 양 끝에서 이루어짐

- 선언 : dq = deque()

- 사용 : 기존 리스트 사용방법에 dq.popleft(), dq.appendleft() 함수 추가

- pop(0)를 사용할 수 있지만 popleft()가 더 빠름

 

from collections import defaultdict

: 키/값이 존재하지 않는 경우에 대한 처리를 해야 하는 경우

: 이걸 쓰지 않으면 어떤 원소가 배열에 들어 있는지 확인하는 조건문을 추가해야한다. 

- 선언 : graph = defaultdict(list) , dict = defaultdict(set)

- 추가 : graph.append(), dict.add()

 

import heapq

: 정렬된 데이터 배열을 사용하기 위해 사용하는 모듈로, 이진트리 기반 최소 힙 자료구조입니다. 

- 선언 : h = [] # 일반 배열 선언과 동일

- 원소 추가 : heapq.heappush(h, 4)

- 원소 삭제 : heapq.heappop(h)

- 일반 배열을 힙 자료구조로 변환 : heapq.heapify(list명)

 

from queue import PriorityQueue (heapq 랑 기능 똑같음)

: 리스트에 원소를 추가할 때마다 우선순위에 따라 추가된다. 

- 선언 : q = PriorityQueue()

- 원소 추가 : q.put(1)

- 원소 삭제 : q.get() # heap 이 기본이므로 FIFO! 가장 앞에 있는 원소가 삭제된다.

- 옵션 : maxsize # q = PriorityQueue(maxsize=3)

 


 

자주 사용되는 기법이나 주의해야 할 점을 정리해보았습니다.

 

리스트 복사 - 얕은 복사 vs 깊은 복사

a = [1, 2, 3]
b = a
b[0] = 4
print(a)

# 출력 
# [4, 2, 3]

mutable한 객체(listm, set, dict)에서 얕은 복사(b=a)를 하면 같은 메모리 주소를 바라보기 때문에 의도한 대로 b의 값만 바꾸는 것이 안된다.

따라서 이런 경우, from copy import deepcopy 를 이용하여 깊은 복사를 하는 방법과 슬라이싱을 하는 방법이 있다.

a = [1, 2, 3]
b = a[:]
b[0] = 4

print(a, b)

# 출력
# [1, 2, 3] [4, 2, 3]

 

댓글