본문 바로가기
프로그래밍 언어

파이썬(Python) 정리 - 8. 유용한 표준 라이브러리 - itertools, math, bisect

by hongdor 2020. 12. 14.
728x90

알고리즘 공부를 위해 python으로 PS(problem solving)을 하려고 한다. 

그래서 파이썬을 정리해 본다.

 

출처 : 3.9.1 Documentation (python.org)

 

코딩테스트에 유용한 표준 라이브러리를 알아보자

 

검색해보니

 

내장 함수 

itertools : 순열, 조합

heapq : 이미 한번 정리했던 내용. priority queue

bisect : 이진 탐색 기능을 제공

collections : deque가 들어있는 라이브러리 이미 한번 정리했다.

math : 필수적인 수학적 기능 제공

 

이 라이브러리들이 유용하다는 것을 알 수 있었다.

 

이 중 이미 정리했던 라이브러리를 제외한 내장 함수,itertools, math, bisect, 라이브러리를 알아보자

 

 

1. 내장함수

 

sorted(iterable) : iterable의 항목들로 정렬된 리스트 카피를 반환

sorted(iterable, reverse=True): 위와 동일하나 역으로 정렬

sort() : 내장함수는 아니지만 iist.sort() 로 보통 자료형에 내장되어있다. list 자체를 재정렬한다.

abs(x) : x의 절대값 반환. fabs는 2 → 2.0 float이고 abs는 2 → 2 로 int이다.

sum(iterable) : iterable 항목들의 합계를 반환 

float(x) : 숫자 또는 문자열 x를 실수로 변환해 반환

type(object) : 타입을 반환

int(s) : 문자열 s를 숫자 자료형으로 변환

str(x) : 숫자 자료형 x를 문자열로 변환

len(s) : 객체의 길이를 반환

max(iterable) : 배열 중 가장 큰 것 반환

max(a, b) : a, b 중 큰 것 반환

min(iterable) : 배열 중 가장 작은 것 반환

min(a, b) : a, b 중 작은 것 반환

a ** b : a의 b승, 내장함수의 pow와 math.pow 함수보다 빠르다.

 

 

2. itertools 

 

itertools.permutations('ABCD', 2) : 순열

> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD 

 

itertools.combinations('ABCD', 2) : 조합

> AB AC AD BA BC BA CA CB CD DA DB DC

 

itertools.product('ABCD', 2) : 중복 순열

> AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD

 

itertools.combinations_with_replacement('ABCD', 2) : 중복 조합

> AA AB AC AD BB BC BD CC CD DD

 

 

3. math

함수 설명 양수 음수
math.fabs(x) 실수 x의 절대값 반환 2 → 2.0 -2.1 → 2.1
math.ceil(x) x 올림 2.1 → 3 -2.1 → -2
math.floor(x) x 내림 2.1 → 2 -2.1 → -3
math.trunc(x) x 버림 2.1 → 2 -2.1 → -2
math.round(x, n) n번째 소숫점까지 반올림 round(0.466666666, 4) → 0.4667 / 내장 함수이나, 옮김.
math.sqrt(x) x 의 제곱근 반환
math.factorial(x) x의 팩토리얼 x! 5 → 5 * 4 * 3 * 2 * 1 valueError
math.gcd(list) 최대 공약수 음수가 있어도 나눌 수 있는가장 큰 양수 반환. 모두 0이면 0
math.lcm(list) 최소 공배수 어느 하나가 0이면 0반환. empty list면 1 반환 (3.9버전)
math.comb(n, k) n개 중 k개를 뽑는 조합 수 정수가아니면 typeError ValueError
math.perm(n, k) n개 중 k개를 뽑는 순열 수 정수가아니면 typeError ValueError

 

 

4. bisect

 

bisect.bisect_left(a, x) : 정렬된 순서를 유지하도록 a에 x를 삽입할 위치를 찾는다. x가 a에 있으면 왼쪽에 삽입

bisect.bisect_right : bisect_left와 동일하지만 오른쪽 위치를 찾는다.

bisect.bisect : bisect_right와 동일

bisect.insort_left : a에 x를 정렬된 순서로 삽입한다. a.insert(bisect.bisect_left(a, x, lo, hi), x)와 동등

bisect.insort_right : insort_left와 비슷하지만 a에 x를 기존 항목 오른쪽에 삽입

bisect.insort : insort_right와 동일

 

이진 검색 알고리즘을 이용해서 시퀀스를 검색하고, 시퀀스에 항목을 삽입할수 있는 함수를 제공

 

미리 정렬된 배열이 필요하다.

 

import bisect sequence = [1, 3, 4, 5]

print(bisect.bisect_right(sequence, 3))  >> index 2

> 3을 찾고 3의 오른쪽 위치 index를 반환

print(bisect.bisect_left(sequence, 3)) >> index 1

> 3을 찾고 3의 왼쪽 위치 index를 반환

 

728x90

댓글0