220920_파이썬 모듈 정리

Csw·2022년 9월 19일
0

TIL

목록 보기
10/18

파이썬 코딩테스트 시 사용 가능한 모듈 정리

해당 문서의 내용은 본인의 학습 목적으로 정리하였으며,
실제 코딩테스트 시에는 사용이 불가할 수 있으니 참고하시기 바랍니다.

시간이 될 때마다 해당 문서를 계속해서 업데이트 할

import math
from collections import defaultdict, Counter, deque
from queue import Queue, LifoQueue, PriorityQueue
from itertools import combinations, permutations
from heapq import heapify, heappush, heappop
from bisect import bisect_left, bisect_right

1. math - 수학 함수

▶ 수론 및 표현 함수

  1. ceil : 올림
>> Code
          import math

          print(math.ceil(3.2))
          # 결과 : 4
          print(math.ceil(-2.7)))
          # 결과 : -2
  1. comb(n,k) : 조합

    버전 3.8에 추가

    • 반복과 순서 없이 n 개의 항목에서 k 개의 항목을 선택하는 방법의 수를 반환
    • n >= k이면 n! / (k! * (n - k)!)을, n < k 이면 0을 반환
    • 식 의 다항식 전개에서 k 번째 항의 계수와 같기 때문에 이항 계수(binomial coefficient)라고도 합니다. (1 + x) ** n
    • 인자 중 어느 하나라도 정수가 아니면 TypeError를 발생시키고, 인자 중 어느 하나라도 음수이면 ValueError를 발생시킴.
>> Code
          import math

          print(math.comb(5,2))
          # 결과 : 10
  1. copysign(x,y) : x의 크기(절댓값)와 y의 부호를 갖는 float를 반환
    • 단, y가 0인 경우에는 x의 절댓값을 반환
>> Code
          import math

          print(math.comb(5,-7))
          # 결과 : -5
          print(math.comb(-7.3,2))
          # 결과 : 7.3
          print(math.comb(2.4,0))
          # 결과 : 2.3
          
  1. fabs(x) : x의 절댓값을 반환
>> Code
          import math

          print(math.fabs(2.5))
          # 결과 : 2.5
          print(math.fabs(-1.2))
          # 결과 : 1.2
  1. factorial(x) : x 계승(factorial을 정수로 반환.
    • x가 음수이면 ValueError를 발생시킴
>> Code
          import math

          print(math.factorial(5))
          # 결과 : 120
  1. floor(x) : 내림
>> Code
          import math

          print(math.floor(3.2))
          # 결과 : 3
          print(math.floor(-2.7))
          # 결과 : -3
  1. fmod(x,y) : 부동소수점 나머지계산
>> Code
          import math

          print(math.fmod(5.7, 2,3))
          # 결과 : 1.1000000000000005
          print(math.fmod(-7.4, -2.1))
          # 결과 : -1.1
  1. frexp(x) : x를 2의 거듭제곱을 이용하여 표현할 때, 가수와 지수를 (m, e) 쌍으로 반환
    • m은 float, e는 정수이며, x == m*2**e가 성립
      ※ 0.5 <= abs(m) < 1 임을 주의할 것
>> Code
          import math

          print(math.f(10))
          # 결과 : (0.625, 4)
          print(math.f(8))
          # 결과 : (0.5, 4)
  1. fsum(array) : 이터러블(iterable)에 있는 값의 정확한(accurate) 부동소수점 합을 반환. 여러 중간 부분 합을 추적하여 정밀도 손실을 방지
>> Code
          import math

          print(sum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]))
          # 결과 : 0.9999999999999999
          print(math.fsum([.1, .1, .1, .1, .1, .1, .1, .1, .1, .1]))
          # 결과 : 1
  1. gcd(x, y) : 지정된 정수 인자의 최대 공약수를 반환.
    • 버전 3.5에 추가
    • 버전 3.9에서 변경 : 임의의 개수 인자에 대한 지원이 추가됨. 이전에는, 단지 두 개의 인자만 지원.
    • 모든 인자가 0이거나 인자가 없는 경우(gcd())는 0을 반환.
>> Code
          import math

          print(math.gcd(36, 24))
          # 결과 : 12
          print(math.gcd(24, 40, 64))
          # 결과 : 8
  1. isclose(a, b, rel_tol = 1e-09 , abs_tol = 0.0 ) : a 와 b가 근접한 것인지 판단하여 True/False로 반환
    • rel_tol : 상대 허용 오차. 허용 오차를 5%로 설정하려면 0.05로 지정하면 됨. default 값은 1e-0.9.
    • abs_tol : 최소 절대 허용 오차. 0에 가까운 비교에 유용함. 0 이상의 값을 지정해야 함.
    • 에러가 발생하지 않는다면, 결과는 다음과 같음.
      abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
>> Code
          import math

          print(math.f())
          # 결과 : ~
  1. isfinite(x) : x가 무한대 혹은 NaN이 아니면 True를, 그렇지 않으면 False를 반환
    • 버전 3.2에 추가
>> Code
          import math

          print(math.isfinite(5))
          # 결과 : True
  1. isinf(x) : x가 양 또는 음의 무한대이면 True를, 그렇지 않으면 False를 반환
>> Code
          import math

          print(math.isinf(3.7))
          # 결과 : False
  1. isnan(x) : x가 NaN(not a number)이면 True를, 그렇지 않으면 False를 반환
>> Code
          import math
          import numpy as np
          import pandas as pd

          print(math.isnan(np.nan))
          # 결과 : True
          print(pd.isna(np.nan))
          # 결과 : True
  1. isqrt(n) : 음이 아닌 정수 n의 정수 제곱근을 반환.

    -math.floor(sqrt(n))과 동일한 결과

    • a² ≤ n을 만족하는 가장 큰 정수 a
    • n ≤ a² 을 만족하는 가장 작은 정수 a 즉 n의 정확한 제곱근의 올림을 구할 때 더 유용하게 사용됨. → a = 1 + math.isqrt(n-1)
      • `n보다 크거나 같은 최소 제곱수의 밑을 구하기
>> Code
          import math

          print(math.isqrt(9))
          # 결과 : 3
          print(math.isqrt(13))
          # 결과 : 320보다 크거나 같은 최소의 제곱수의 밑을 구하기!
          print(1+math.isqrt(20-1))
          # 결과 : 3
  1. lcm(n) : 지정된 정수 인자의 최소 공배수를 반환.
    • 버전 3.9에 추가
    • 어느 하나의 인자가 0이면 0을 반환.
    • 인자가 없는 경우(lcm())은 0을 반환.
>> Code
          import math

          print(math.f())
          # 결과 : ~
  1. ldexp(a, n) : a * (2**b)를 반환

    이것은 본질적으로 함수 frexp()의 역함수

>> Code
          import math

          print(math.ldexp(3,3))
          # 결과 : 24
  1. modf(x) : x의 소수와 정수 부분tuple 형태로 반환
    • 두 결과 모두 x의 부호를 가지며 float임
>> Code
          import math

          print(math.modf(2.7))
          # (0.7000000000000002, 2.0)
		  print(math.modf(-7.3))
          # 결과 : (-0.2999999999999998, -7.0)
  1. nextafter(x, y) : y를 향한 x 다음의 부동 소수점을 반환
    • 버전 3.9에 추가
    • x가 y와 같으면, y를 반환
    • x → y 까지의 수 중 표현할 수 있는 다음 수를 리턴
>> Code
          import math

          print(math.nextafter(2, 3))
          # 결과 : 2.0000000000000004
          print(math.nextafter(6, 0))
          # 결과 : 5.999999999999999
          print(math.nextafter(0, 9))
          # 결과 : 5e-324
          print(math.nextafter(3.141592, 3.14))
          # 결과 : 3.1415919999999997
  1. perm : 순열
    • 반복 없고 순서 있게 n 개의 항목에서 k 개의 항목을 선택하는 방법의 수를 반환
    • k <= n이면 n! / (n - k)!을, k > n이면 0을 반환
    • 버전 3.8에 추가
>> Code
          import math

          print(math.perm(5,2))
          # 결과 : 20
  1. prod(array) : 이터러블(iterable)에 있는 모든 요소의 곱을 계산. 곱의 기본 start 값은 1임
    • 버전 3.8에 추가
>> Code
          import math

          print(math.prod([1,3,2,4,5]))
          # 결과 : 120
          print(math.prod({5,2,4}))
          # 결과 : 40
          print(math.prod([4,5,6]))
          # 결과 : 120
  1. reminder(x,y) : y에 대한 x의 IEEE 754 스타일 나머지를 반환
    • 버전 3.7에 추가
    • y의 배수 중 x에 가장 근접한 값을 찾고(더 클 수도 있고 작을 수도 있음), 그 때 x에서 y의 배수를 뺀 값을 return
    • 유한한 x 와 0이 아닌 유한한 y에 대해, x - n*y를 의미
    • 여기서 n은 몫 x/y의 정확한 값에 가장 가까운 정수를 의미
    • x / y가 두 개의 인접한 정수 사이의 정확히 중간이면, 가장 가까운 짝수 정수가 n으로 사용됨.
    • 나머지 r = remainder(x, y)는 항상 abs(r) <= 0.5 * abs(y)를 만족
>> Code
          import math

          print(math.remainder(15,4))
          # 결과 : -1.0
		  print(math.remainder(22,3))
          # 결과 : 1.0
          
       ※ x/y 정확히 인접한 정수 사이의 정확한 중간일 때
		  print(math.remainder(14,4))
          # 결과 : -2.0 
          # ∵ 14 = 4 * 4 - 2 = 4 * 3 - 2 인데, 이런 경우에는 n을 짝수로 선택하기 때문
		  print(math.remainder(10,4))
          # 결과 : 2.0
          # ∵ 10 = 4 * 3 - 2 = 4 * 2 - 2 인데, 이런 경우에는 n을 짝수로 선택하기 때문
  1. trunc(x) : 정수 부분은 남겨두고 소수 부분이 제거된 x 를 반환
>> Code
          import math

          print(math.trunc(2.3))
          # 결과 : 2
		  print(math.trunc(-9.9))
          # 결과 : -9
  1. ulp(x) : x의 최하위 비트 값을 반환
    • 버전 3.9에 추가
    • ULP는 “Unit in the Last Place(마지막 자리의 단위)”를 의미
    • x가 NaN(not a number)이면, x를 반환합니다.
    • x가 음수이면, ulp(-x)를 반환합니다.
    • x가 양의 무한대이면, x를 반환합니다.
    • x가 0과 같으면, 가장 작은 양의 정규화되지 않은(denormalized) 표현 가능한 float를 반환합니다 (가장 작은 양의 정규화된 float, sys.float_info.min보다 작습니다).
    • x가 가장 큰 양의 표현 가능한 float와 같으면, x보다 작은 첫 번째 float가 x - ulp(x)가 되도록, x의 최하위 비트 값을 반환합니다.
    • 그렇지 않으면 (x가 양의 유한 수이면), x보다 큰 첫 번째 float가 x + ulp(x)가 되도록, x의 최하위 비트 값을 반환합니다.
>> Code
          import math

          print(math.ulp(3))
          # 결과 : 4.440892098500626e-16
          print(math.ulp(5.5))
          # 결과 : 8.881784197001252e-16
          print(math.ulp(-10.2))
          # 결과 : 1.7763568394002505e-15
          print(math.ulp(0))
          # 결과 : 5e-324

▶ 지수와 로그함수

  1. exp(x) : e의 x 거듭제곱을 반환.
    • e는 자연로그의 밑(base)
    • math.e ** xpow(math.e, x)보다 정확함
>> Code
          import math

          print(math.exp(0))
          # 결과 : 0
          print(math.exp(1))
          # 결과 : 2.718281828459045
          print(math.exp(2))
          # 결과 : 7.38905609893065
  1. expm1(x) : e의 x 거듭제곱에서 1을 뺀 값을 반환
>> Code
          import math

          print(math.expm1(0))
          # 결과 : 0
          print(math.expm1(1))
          # 결과 : 1.718281828459045
          print(math.expm1(2))
          # 결과 : 6.38905609893065
  1. loa(x, a) : a를 밑(base)로 하는 x의 로그값을 반환
    • log(x) : 인자를 하나만 적으면 x의 자연로그를 반환(밑: e)
    • log(x, a) = log(x) / log(base) 로 계산
>> Code
          import math

          print(math.log(8,2)
          # 결과 : 3.0
          print(math.log(25,5)
          # 결과 : 2.0
          print(math.log(128,8)
          # 결과 : 1.75
  1. log1p(x) : (1+x)의 자연로그를 반환.
    • 결과는 0에 가까운 x에 대해 정확한 방식으로 계산됨.
>> Code
          import math

          print(math.log1p(1))
          # 결과 : 0.6931471805599453
          print(math.log1p(0))
          # 결과 : 0.0
          print(math.log1p(0.1))
          # 결과 : 0.09531017980432487
  1. log2(x) : 밑이 2인 x의 로그값을 반환
    • 버전 3.3에 추가
>> Code
          import math

          print(math.log2(8))
          # 결과 : 3.0
		  print(math.log2(1))
          # 결과 : 0.0
          print(math.log2(20)
          # 결과 : 4.321928094887363
  1. log10(x) : 밑이 10인 x의 로그를 반환.
    • 이것은 일반적으로 log(x, 10) 보다 정확함
>> Code
          import math

          print(math.log10(10))
          # 결과 : 1.0
		  print(math.log10(1))
          # 결과 : 0.0
          print(math.log10(20)
          # 결과 : 1.3010299956639813
  1. pow(x, y) : x의 y 거듭제곱을 반환
    • x가 0이거나 NaN일 때도 pow(1.0, x)와 `pow(x, 0.0)은 항상 1.0을 반환
    • x가 음수이고, y가 정수가 아니면 `pow(x, y)는 정의되지 않고 ValueError를 발생시킴
    • 내장 ** 연산자와 달리, math.pow()는 두 인자를 모두 float 형으로 변환함.
      → 정확한 정수 거듭제곱을 계산하려면 **나 내장 pow(함수)를 사용할 것.
>> Code
          import math

          print(math.pow(2,3))
          # 결과 : 8.0
          print(math.pow(-2, 3))
          # 결과 : -8.0
          print(math.pow(0, 0))
          # 결과 : 1
     
     비교
     	  print(pow(2,3))
          # 결과 : 8
     	  print(2**3)
          # 결과 : 8
  1. sqrt(x) : x의 제곱근을 반환
    • 결과값은 float type.
>> Code
          import math

          print(math.sqrt(16))
          # 결과 : 4.0
     비교
     	  print(16**0.5)
          # 결과 : 4.0

▶ 각도 변환

  1. degrees(x) : 각도 x를 radian에서 degree로 변환
>> Code
          import math

          print(math.radians(math.pi))
          # 결과 : 180
  1. radians(x) : 각도 x를 degree에서 radian으로 변환
>> Code
          import math

          print(math.radians(360))
          # 결과 : 6.2831853071795869  ->  2π

▶ 삼각함수

  1. acos(x) : x의 arc cosine을 radian으로 반환.
    • 결과는 0과 π 사이
>> Code
          import math

          print(math.acos(0))
          # 결과 : 1.5707963267948966   ->  π/2
          print(math.acos(0.5))
          # 결과 : 1.0471975511965979   ->  π/3
          print(math.acos(1))
          # 결과 : 0.0
  1. asin(x) : x의 arc sine을 radian으로 반환.
    • 결과는 -π/2와 π/2 사이
>> Code
          import math

          print(math.asin(0))
          # 결과 : 0.0
          print(math.asin(0.5))
          # 결과 : 0.5235987755982989  ->  π/6
          print(math.asin(1))
          # 결과 : 1.5707963267948966   ->  π/2 
  1. atan(x) : x의 arc tangent을 radian으로 반환.
    • 결과는 -π/2와 π/2 사이
>> Code
          import math

          print(math.asin(0))
          # 결과 : 0.0
          print(math.asin(0.5))
          # 결과 : 0.4636476090008061
          print(math.asin(1))
          # 결과 : 0.7853981633974483   ->  π/4
  1. atan2(y, x) : atan(y/x)를 radian으로 반환.
    • 결과는 -π와 π 사이
    • 평면에 있는 원점과 점 (x,y)를 연결한 직선의 기울기
>> Code
          import math

          print(math.atan2(1,1))
          # 결과 : 0.7853981633974483   ->  π/4
          print(math.atan2(2,1))
          # 결과 : 1.1071487177940904
          print(math.atan2(1,2))
          # 결과 : 0.4636476090008061
  1. cos(x) : x의 cosine을 반환.
    • 결과는 0과 π 사이
>> Code
          import math

          print(math.cos(0))
          # 결과 : 1.0
          print(math.acos(math.pi))
          # 결과 : -1.0
          print(math.asin(-math.pi/3))
          # 결과 : 0.5000000000000001
  1. sin(x) : x의 sine을 radian으로 반환.
    • 결과는 0과 π 사이
>> Code
          import math

          print(math.sin(0))
          # 결과 : 1.2246467991473532e-16
          print(math.sin(math.pi))
          # 결과 : 0.5235987755982989  ->  π/6
          print(math.sin(-math.pi/2))
          # 결과 : -1.0
  1. tan(x) : x의 tangent를 radian으로 반환.
    • 결과는 0과 π 사이
>> Code
          import math

          print(math.tan(0))
          # 결과 : 0.0
          print(math.tan(math.pi/4))
          # 결과 : 0.9999999999999999
          print(math.tan(-math.pi/3))
          # 결과 : -1.7320508075688767
  1. dist(p, q) : 각각 좌표 sequence 혹은 iterable로 제공되는 두 점 p외 q 사이의 유클리드 거리를 반환.
    • 버전 3.8에 추가
    • 두 점의 차원은 동일해야 함.
    • sqrt(sum((px - qx) ** 2.0 for px, qx in zip(p, q)))를 의미
>> Code
          import math

          print(math.dist((0,0),(3,4)))
          # 결과 : 5.0
          print(math.dist([0,0,0], [3,4,12]))
          # 결과 : 13.0
  1. hypot(x, y) : 유클리드 크기(norm) sqrt(sum(x**2 for x in coordinates))를 반환
    • 버전 3.8에서 변경 : n차원 점에 대한 지원이 추가. 이전에는 2차원만 지원.
    • 버전 3.10에서 변경 : 최대 오류가 1 ulp(마지막 위치의 단위) 미만이 되도록 알고리즘의 정확도를 개선. 보다 일본적으로 결과는 거의 항상 0.5 ulp 이내로 올바르게 반올림됨.
>> Code
          import math

          print(math.hypot(3, 4))
          # 결과 : 5.0
          print(math.hypot(3, 4, 12))
          # 결과 : 13.0
          print(math.asin(1))

▶ 쌍곡선 함수

쌍곡선 함수는 원 대신 쌍곡선을 기반으로 하는 삼각 함수의 동류(analog)입니다.

  1. cosh(x) : x의 쌍곡 코사인(hyperbolic cosine)을 반환
>> Code
          import math

          print(math.cosh(2))
          # 결과 : 3.7621956910836314
          print(math.cosh(0))
          # 결과 : 1.0
  1. sinh(x) : x의 쌍곡 사인(hyperbolic sine)을 반환
>> Code
          import math

          print(math.sinh(2))
          # 결과 : 3.6268604078470186
          print(math.sinh(0))
          # 결과 : 0.0
  1. tanh(x) : x의 쌍곡 탄젠트(hyperbolic tangent)를 반환
>> Code
          import math

          print(math.tanh(2))
          # 결과 : 0.9640275800758169
          print(math.tanh(0))
          # 결과 : 0.0
  1. acos(x) : x의 역 쌍곡 코사인(inverse hyperbolic cosine)을 반환

    정의역 : x ≥ 1

>> Code
          import math

          print(math.acosh(2))
          # 결과 : 1.3169578969248166
          print(math.acosh(1))
          # 결과 : 0.0
  1. asin(x) : x의 역 쌍곡 사인(inverse hyperbolic sine)을 반환
>> Code
          import math

          print(math.asinh(2))
          # 결과 : 1.4436354751788103
          print(math.asinh(0))
          # 결과 : 0.0
  1. atan(x) : x의 역 쌍곡 탄젠트(inverse hyperbolic tangent)를 반환

    정의역 : -1 < x < 1

>> Code
          import math

          print(math.atanh(0.5))
          # 결과 : 0.5493061443340549
          print(math.atanh(0))
          # 결과 : 0.0

▶ 특수 함수

  1. erf(x) : x의 오차 함수를 반환
    • 버전 3.2에 추가
    • 이 함수는 누적 표준 정규 분포 erf()와 같은 기존 통계 함수를 계산하는데 사용됨.
    	def phi(x):
    		Cumulative distribution function for the standard normal distribution'
       		return (1.0 + erf(x / sqrt(2.0))) / 2.0
>> Code
          import math

  1. erfc(x) : x의 여오차 함수를 반환
    • 버전 3.2에 추가
    • 여오차 함수(complementary error function) erfc(x) = 1.0 - erf(x)
    • 뺄셈으로 인해 유효 숫자의 소실이 발생하는 x의 큰 값에 사용됩니다.
>> Code
          import math

  1. gamma(x) : x의 감마 함수(Gamma function)를 반환
    • 버전 3.2에 추가
>> Code
          import math

  1. lgamma(x) : x의 감마 함수의 절댓값의 자연로그를 반환
    • 버전 3.2에 추가
      정의역 : x ≥ 1
>> Code
          import math

▶ 상수

  1. pi : 사용 가능한 정밀도로, 수학 상수 π = 3.141592…
    	def phi(x):
    		Cumulative distribution function for the standard normal distribution'
       		return (1.0 + erf(x / sqrt(2.0))) / 2.0
>> Code
          import math
	
  		  print(math.pi)
          3.141592653589793
  1. e : 사용 가능한 정밀도로, 수학 상수 e = 2.718281…
>> Code
          import math
          
          print(math.pi)
          2.718281828459045

  1. tau : 사용 가능한 정밀도로, 수학 상수 τ = 6.283185… 타우(tau)는 원주와 반지름의 비율인 2π에 해당하는 원 상수
    • 버전 3.6에 추가
>> Code
          import math
          
          print(math.tau)
          6.283185307179586

  1. inf : 부동 소수점 양의 무한대.
    • 버전 3.6에 추가
    • 음의 무한대는 -math.inf를 사용할 것
    • float('inf')의 출력과 동일
>> Code
          import math

		  print(math.inf)
          inf
          print(float('inf'))
          inf
  1. nan : A floating-point “not a number” (NaN) value. Equivalent to the output of float('nan').
    • 버전 3.5에 추가
      정의역 : x ≥ 1
>> Code
          import math

          math.nan == math.nan
     >>>  False
          float('nan') == float('nan')
     >>>  False
          math.isnan(math.nan)
     >>>  True
          math.isnan(float('nan'))
     >>>  True

0개의 댓글