cf) 표준 라이브러리 : 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리
라이브러리 종류
내장 함수 | print(), input() 과 같은 기본 입출력 기능부터 sorted() 와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리 |
itertools | 파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리, 순열과 조합 라이브러리 제공 |
heapq | 힙(Heap) 기능을 제공하는 라이브러리, 우선순위 큐 기능을 구현하기 위해 사용 |
bisect | 이진 탐색(Binary Search) 기능을 제공하는 라이브러리 |
collections | 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리 |
math | 필수적인 수학적 기능을 제공하는 라이브러리, 팩토리얼, 제곱근, 최대공약수, 삼각함수, Pi같은 상수 포함 |
1. 내장 함수
별도의 import 명령어 없이 바로 사용할 수 있다.
- sum() : 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환
result = sum([1, 2, 3, 4, 5])
print(result)
# 15
- min() : 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환
result = min(7, 3, 5, 2)
print(result)
# 2
- max() : 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환
result = max(7, 3, 5, 2)
print(result)
# 7
- eval() : 해당 수식을 계산한 결과를 반환
result = eval('(3 + 5) * 7')
print(result)
# 56
- sorted() : iterable 객체가 들어왔을 때, 정렬된 결과를 반환
# 리스트 sorted()로 정렬하기
result = sorted([9, 1, 8, 5, 4])
print(result)
result = sorted([9, 1, 8, 5, 4], reverse = True)
print(result)
# [1, 4, 5, 8, 9]
# [9, 8, 5, 4, 1]
# key를 이용한 리스트 sorted()로 정렬하기
result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key = lambda x: x[1], reverse = True)
print(result)
[('이순신', 75), ('아무개', 50), ('홍길동', 35)]
# sort() 함수를 이용한 리스트 정렬하기
data = [9, 1, 8, 5, 4]
data.sort()
print(data)
# [1, 4, 5, 8, 9]
2. itertools
반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리이다.
- permutations : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다.
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)
# [('A', 'B', 'C'), ('A', 'C', 'B'), ('B', 'A', 'C'), ('B', 'C', 'A'), ('C', 'A', 'B'), ('C', 'B', 'A')]
- combinations : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다.
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2))
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]
- product : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다.
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
- combinations_with_replacement : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 단, 원소를 중복해서 뽑는다.
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2))
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
3. heapq
다익스트라 최단 경로 알고리즘을 포함해 다양한 알고리즘에서 우선순위 큐 기능을 구현하고자 할 때 사용된다.
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# max_heapq
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq.heappush(h, -value)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
for i in range(len(h)):
result.append(-heapq.heappop(h))
return result
result = heapsort([1, 3, 5, 7, 9, 2, 4, 6, 8, 0])
print(result)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
4. bisect
정렬된 배열에서 특정한 원소를 찾아야 할 때 주로 사용되고, 배열 위치를 반환한다.
- 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 = bisect_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))
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3))
# 2
# 6
5. collections
- deque() : Queue 라이브러리는 일반적인 큐 자료구조를 구현하는 라이브러리가 아니다. 따라서, deque()를 이용해 큐를 구현해야 한다.
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() : 등장 횟수를 세는 기능, 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번 씩 등장했는지 반환한다.
from collections import Counter
counter = Counter(['red', 'blue', 'green', 'blue', 'blue'])
print(counter['blue']) # 'blue'가 등장한 횟수 출력
print(counter['green']) # 'green'가 등장한 횟수 출력
print(counter['red']) # 'red'가 등장한 횟수 출력
print(dict(counter)) # 사전 자료형으로 변환
# 3
# 1
# 1
# {'red': 1, 'blue': 3, 'green': 1}
6. math
수학 계산을 요구하는 문제에서 사용한다.
import math
print(math.factorial(5)) # 팩토리얼을 출력
print(math.sqrt(7)) # 7의 제곱근을 출력
print(math.gcd(21, 14)) # 최대 공약수를 출력
print(math.pi) # 파이(pi) 출력
print(math.e) # 자연상수 e 출력
# 120
# 2.6457513110645907
# 7
# 3.141592653589793
# 2.718281828459045
'이것이 코딩테스트다'를 읽고 공부한 내용을 바탕으로 작성하였습니다.
'Python > 이것이 코딩테스트다' 카테고리의 다른 글
[Python] 6. 순열과 조합 (0) | 2022.11.14 |
---|---|
[Python] 5. 구간 합 계산 (0) | 2022.11.14 |
[Python] 4. 투 포인터 (0) | 2022.11.11 |
[Python] 3. 에라토스테네스의 체 (0) | 2022.11.10 |
[Python] 1. 복잡도 (0) | 2022.11.08 |