Algorithm
유용한 표준 라이브러리 - itertools, heapq, bisect,collections, math
테니드2
2021. 4. 27. 00:23
- 내장 함수: 기본 입출력, 정렬 등의 기본적인 함수
- itertools: 반복되는 데이터 처리 ex) 순열,조합
- heapq: 힙 자료구조 ex) 큐, 다익스트라 최단 경로
- bisect: 이진 탐색
- collections: 덱(deque), 카운터(Counter) 등 자료구조
- math: 수학적 기능 ex) 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련함수 및 파이(pi)와 같은 수학적 상수
함수명 | 역할 | 결과 |
sum(iterable) | iterable안 변수 안에 수를 모두 더한 후 그 결과를 반환한다. | ![]() |
min(arg1, arg2, ... ) | 매개변수에 있는 변수들 중 가장 작은 값을 반환한다. |
![]() |
max(arg1, arg2, ... ) | 매개변수에 있는 변수들 중 가장 큰 값을 반환한다. | ![]() |
eval(expression, globals=None, locals=None) | 문자열로 표현된 식을 수학적으로 계산한 후 그 결과를 반환한다. ※ 문자열을 그대로 실행하기 때문에 프로그램 개발 시에 나쁜 의도로 코드 내용을 삽입하여 보안이 취약할 수 있다. |
![]() |
sorted(iterable, *, reverse=False) | 변수안에 원소들을 정렬하여 반환한다. | ![]() |
sorted(iterable, *, key=None, reverse=False) | key에 함수를 기준으로 정렬하여 반환한다. | ![]() |
# 순열과 조합
- 순열: 서로 다른 n개에서 서로 다른 r개를 선택
- 조합: 서로 다른 n개에서 순서에 상관없이 서로 다른 r개를 선택
# 순열 예시
from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3))
print(result)
data에서 순서가 상관있게 서로 다른 3개를 선택한다.
- 결과 화면
# 조합 예시
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(data, 2))
print(result)
data에서 순서가 존재하는 순서에 상관없이 2개를 선택한다.
- 결과 화면
# 중복 순열
from itertools import product
data = ['A', 'B', 'C']
result = list(product(data, repeat=2))
print(result)
- 결과 화면
#중복 조합
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2))
print(result)
- 결과화면
# Counter
- collections 라이브러리에 속한 함수로써 등장 횟수를 세는 기능
- 리스트와 같은 반복 가능한 객체가 주어졌을 때 내부의 원소가 몇 번 등장했는지를 반환
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue'])
print(counter['green'])
print(dict(counter))
- 결과 화면
# 최대 공약수와 최소 공배수
math.gcd()를 이용해서 최대 공약수를 구할 수 있다. 이것을 이용하면 최소 공배수도 얻어낼 수 있다.
import math
# 최소 공배수(LCM)를 구하는 함수
def lcm(a, b):
return a * b // math.gcd(a, b)
a = 21
b = 14
print(math.gcd(a, b)) # 최대 공약수(GCD) 계산
print(lcm(a, b)) # 최소 공배수(LCM) 계산
- 결과 화면