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) 계산

 

- 결과 화면