bisect
이진 탐색 기능을 제공하는 라이브러리
bisect 라이브러리는 '정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적으로 사용됨
bisect_left() 함수와 bisect_right() 함수가 가장 중요하게 사용됨
이 두 함수는 시간 복잡도 O(logN)에 동작함
함수 | 설명 |
bisect_left(a, x) | 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드 |
bisect_right(a, x) | 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드 |
정렬된 리스트 [1, 2, 4, 4, 8]이 있을 때, 새롭게 데이터 4를 삽입하려 할 때
bisect_left(a, 4)와 bisect_right(a, 4)는 각각 인덱스값으로 2와 4를 반환함
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
print(bisect_left(a, x))
print(bisect_right(a, x))
# 2
# 4
from bisect import bisect_left, bisect_right
# 값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
right_index = bisect_right(a, right_value)
left_index = biscet_left(a, left_value)
return right_index - left_index
# 리스트 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
# 값이 4인 데이터 개수 출력
print(count_by_range(a, 4, 4))
# 2
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3))
# 6
collections
덱, 카운터 등의 유용한 자료구조를 포함하고 있는 라이브러리
deque
보통 파이썬에서는 deque를 사용해 큐를 구현함
별도로 제공되는 Queue 라이브러리가 있지만 일반적인 큐 자료구조를 구현하는 라이브러리는 아니기에 deque를 이용해 큐를 구현해야 함
리스트 자료형과 다르게 인덱싱, 슬라이싱 등의 기능은 사용할 수 없지만 연속적으로 나열된 데이터의 시작 부분이나 끝부분에 데이터를 삽입하거나 삭제할 때 매우 효과적으로 사용됨
deque는 스택이나 큐 자료구조의 대용으로 사용될 수 있음
함수 | 설명 |
popleft() | 첫 번째 원소를 제거할 때 |
pop() | 마지막 원소를 제거할 때 |
appendleft(x) | 첫 번째 인덱스에 원소 x를 삽입할 때 |
append(x) | 마지막 인덱스에 원소를 삽입할 때 |
from collections import deque
data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)
print(data)
print(list(data)) # 리스트 자료형으로 변환
# deque([1, 2, 3, 4, 5])
# [1, 2, 3, 4, 5]
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)) # 사전 자료형으로 변환
# 3
# 1
# {'red': 2, 'blue': 3, 'green': 1}
math
필수적인 수학적 기능을 제공하는 라이브러리
팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이와 같은 상수를 포함하고 있음
함수 | 설명 |
factorial(x) | x 팩토리얼 반환 = x! |
sqrt(x) | 제곱근 반환 |
gca(a, b) | a와 b의 최대 공약수 |
pi | 파이 |
e | 자연상수 |
math 라이브러리의 factorial(x) 함수는 x! 값을 반환함
import math
print(math.factorial(5)) # 5 팩토리얼 출력
# 120
sqrt(x)는 x의 제곱근 반환
import math
print(math.sqrt(7)) # 7의 제곱근 출력
# 2.6457513110645907
gcd(a, b)는 a와 b의 최대 공약수 반환
import math
print(math.gcd(21, 14))
# 7
파이, 자연상수
import math
print(math.pi) # 파이(pi) 출력
print(math.e) # 자연상수 e 출력
# 3.141592653589793
# 2.718281828459045