이것이 코딩 테스트다 with 파이썬을 읽고 작성하는 글입니다.
자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리
별도의 import 명령어 없이 바로 사용할 수 있는 함수
대표적으로 input(), print()가 있다.
sum()
함수 : 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환하는 함수
result = sum([1,2,3,4,5])
print(result) #15
min()
함수 : 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환.max()
함수 : 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환.result1 = min(1,3,4,2,5)
result2 = max(1,3,4,2,5)
print(result1, result2) #1 5
eval()
함수 : 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환.result = eval("(3 + 5) * 7")
print(result) #56
sorted()
함수 : iterable 객체가 들어왔을 때, 정렬된 결과를 반환. key 속성으로 정렬 기준을 명시할 수 있고, reverse 속성으로 정렬된 리스트를 뒤집을 수 있다.result = sorted([4, 3, 2, 6, 1])
print(result) #[1, 2, 3, 4, 6]
result = sorted([4, 3, 2, 6, 1], reverse = True)
print(result) #[6, 4, 3, 2, 1]
result = sorted([('가나다', 10), ('라마바', 43), ('사아자', 23)], key = lambda x: x[1], reverse = True)
print(result) #[('가나다', 10), ('사아자', 23), ('라마바', 43)]
sort()
함수를 내장하고 있다.data = [6, 3, 5, 1, 2]
data.sort()
print(data) #[1, 2, 3, 5, 6]
반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
permutations
: iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산해주는 클래스. 객체 초기화 이후, 리스트 자료형으로 변환하여 사용한다.
from itertools import permutations
data = ['a', 'b', 'c']
result = list(permutaions(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
: permutaions와 같이 순열을 계산하지만 원소를 중복하여 뽑는다. 객체를 초기화 할 때는 뽑고자 하는 데이터의 수를 repeat 속성값으로 넣어주고, 리스트 자료형으로 변환하여 사용한다.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
: combinations와 같이 조합을 계산하지만 원소를 중복하여 뽑는다. 객체 초기화 이후, 리스트 자료형으로 변환하여 사용한다.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')]
힙 기능을 위한 라이브러리. 주로 우선순위 큐 기능을 구현하고자 할 때 사용된다.
최소 힙으로 구성되어 있어 시간 복잡도 O(NlogN)에 오름차순 정렬이 완료된다.
heap1.heappush()
: 힙에 원소 삽입하는 메서드
heapq.heappop()
: 힙에서 원소 꺼내는 메서드
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())
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]
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())
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]
이진 탐색을 쉽게 구현할 수 있도록 제공되는 라이브러리
정렬된 배열에서 특정 원소를 찾을 때 효과적으로 사용된다.
bisect_left(a, x)
: 정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
bisect_right(a, x)
: 정렬된 순서를 유지하며 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 6]
x = 4
print(bisect_left(a, x)) #2
print(bisect_right(a, x)) #4
from bisect import bisect_left, bisect_right
def count_by_range(a, left_value, right_value):
left_index = bisect_left(a, left_value)
right_index = bisect_right(a, right_value)
return right_index - left_index
a = [1, 2, 3, 4, 4, 4, 4, 6, 8, 9]
print(count_by_range(a, 4, 4)) #4
print(count_by_range(a, -3, 3)) #3
유용한 자료구조를 제공하는 표준 라이브러리
deque
: 큐를 구현하기 위해 사용. 연속적으로 나열되니 데이터의 시작이나 끝 부분에 데이터를 삽입, 삭제할 때 유용하다.
append(x)
: 마지막 인덱스에 원소 삽입
appendleft(x)
: 첫번째 인덱스에 원소 삽입
pop(x)
: 마지막 원소 제거
leftpop(x)
: 첫번째 원소 제거
from collections import deque
data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)
print(data) #deque([1, 2, 3, 4, 5])
print(list(data)) #[1, 2, 3, 4, 5]
Counter
: 등장 횟수를 세는 기능을 제공.from collections import Counter
counter = Counter(['a', 'b', 'a', 'c', 'b', 'b', 'b'])
print(counter['b']) #4
print(counter['c']) #1
print(dict(counter)) #{'a': 2, 'b': 4, 'c': 1}
자주 사용되는 수학적인 기능을 포함하고 있는 라이브러리
factorial(x)
: x!값을 반환한다.
import math
print(math.factorial(5)) #120
sqrt(x)
: x의 제곱근을 반환한다.import math
print(math.sqrt(16)) #4
gcd(a, b)
: a와 b의 최대 공약수를 반환한다.import math
print(math.gcd(21, 14)) #7
pi
, e
와 같은 상수도 제공한다.import math
print(math.pi) #3.141592653589793
print(math.e) #2.718281828459045