쉽게 말하면 도구의 모음을 의미하며,
소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들 이라 할 수 있다.가끔 프레임워크(Framework)와 라이브러리가 헷갈리는 경우가 있다.
프레임워크는 프레임(Frame) + 워크(Work)의 합성어로 틀을 가지고 일하는 것. 즉,
을 뜻합니다. 이 둘은 자유도에서 큰 차이점을 가진다.
특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리를 의미한다
기본 입출력 기능부터 정렬 기능을 포함하고 있는 기본 내장 라이브러리
종류
input() : 한줄의 표준 입력을 받아 문자열로 반환
# input()을 통해 문자열을 받고 이를 split()하여 각각의 원소로 나누고 숫자 자료형으로 변환후, list화
x = list(map(int, input().split()))
print(자료형) : 입력받은 자료형을 표준 출력으로 표현
print("안녕하세요! 코요입니다.")
# 안녕하세요! 코요입니다.
sum(iterable 객체): 원소의 합을 반환
result = sum([7, 3, 5, 2])
print(result)
min(2개 이상의 파라미터): 가장 작은 값을 반환
result = min(7, 3, 5, 2)
print(result)
max(2개 이상의 파라미터): 가장 큰 값을 반환
result = max(7, 3, 5, 2)
print(result)
eval(수식 형태의 문자열): 해당 수식을 계산한 결과를 반환
result = eval("(3 + 5) * 7)
print(result)
sorted(iterable 객체, key=, reverse=bool): 정렬된 결과를 반환, reverse를 통한 오름/내림차순
result = sorted([9, 1, 8, 5, 4]) # 오름차순
print(result) # 1, 4, 5, 8, 9
result = sorted([9, 1, 8, 5, 4], reverse=True) # 내림차순
print(result) # 9, 8, 5, 4, 1
# 자료형을 리스트나 튜플로 한 경우
result = sorted([("홍길동", 35), ("이순신", 75), ("아무개", 50), key = lambda x: x[1], reverse=True)
print(result) # [('이순신', 75), ('아무개', 50), ('홍길동', 35)]
iterable 객체.sort(key=, reverse=bool): 객체 자체를 정렬
data = [9, 1, 8, 5, 4]
data.sort()
print(data)
참고
파이썬에서 iterable 객체는 반복 가능한 객체를 의미한다.
리스트, 사전 자료형, 튜플 자료형 등이 이에 해당된다.
파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
종류
permutations
r개의 데이터를 뽑아 나열하는 모든 경우(순열)
from itertools import permutations
data = ["A", "B", "C"] # 데이터 준비
result = list(permutation(data, 3)) # 모든 순열 구하기
print(result)
# [("A", "B", "C"), ("A", "C", "B"), ("B", "A", "C"), ("B", "C", "A"), ("C", "A", "B"), ("C", "B", "A")]
combinations
r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)
from itertools import combinations
data = ["A", "B", "C"] # 데이터 준비
result = list(combinations(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C)]
from itertools import product
data = ['A', 'B', 'C'] # 데이터 준비
result = list(product(data, repeat=2)) # 2개를 뽑는 모든 순열 구하기(중복 허용)
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
from itertools import combinations_with_replacement
data = ['A', 'B', 'C'] # 데이터 준비
result = list(combinations_with_replacement(data, 2)) # 2개를 뽑는 모든 조합 구하기(중복허용)
print(result)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
힙을 활용한 우선순위 큐 기능을 구현할 때 사용되며, O(NlogN)에 오름차순 정렬을 제공한다.
PriorityQueue 라이브러리가 따로 있지만, heapq가 더 빠르게 동작한다.
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(h))
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(h))
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 라이브러리를 제공함.
'정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적이다.
O(logN)에 정렬된 배열에 맞는 위치를 찾아준다.
from bisect import bisect_left, bisect_right
a = [1, 2, 4, 4, 8]
x = 4
print(bisect_left(a, x)) # 2
print(bisect_right(a, x)) # 4
'정렬된 리스트'에서 특정 범위에 속하는 원소의 개수를 구하는데 효과적이다.
from bisect import bisect_left, bisect_right
# 값이 [left_value, right_value]인 데이터의 개수를 반환하는 함수
def count_by_range(a, left_value, right_value):
right_index = bisect_right(a, right_value)
left_index = bissect_left(a, left_value)\
return right_index - left_index
# 리스트 선언
a = [1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
# 값이 4인 데이터 개수 출력
print(count_by_range(a, 4, 4)) # 2
# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3)) # 6
유용한 자료구조를 제공하는 라이브러리다.
주로 활용되는 자료구조로는 deque와 Counter이다.
리스트와 deque의 시간복잡도 비교
리스트 deque 가장 앞쪽에 원소 추가 O(N) O(1) 가장 뒤쪽에 원소 추가 O(1) O(1) 가장 앞쪽에 원소 제거 O(N) O(1) 가장 뒤쪽에 원소 제거 O(1) O(1) Queue에는 deque를 활용하자!
함수
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)) # 리스트 자료형으로 변환
Counter
등장 횟수를 세는 기능을 제공한다.
iterable 객체가 주어졌을 때, 해당 객체 내부 원소가 몇 번 등장했는지 알려준다.
from collections import Counter
counter = Counter(['red', 'blue', 'red', 'green', 'blue', 'blue'])
print(counter['blue']) # 3
print(counter['green']) # 1
print(dict(counter)) # 사전 자료형으로 변환
'''
{'red': 2, 'blue': 3, 'green': 1}
'''
자주 사용되는 수학적인 기능을 포함하고 있는 라이브러리
팩토리얼, 제곱근, 최대공약수(GCD) 등을 계산해주는 기능을 포함
import math
print(math.factorial(5)) # 120
print(math.sqrt(7)) # 2.6457513110645907
print(math.gcd(21, 14)) # 7
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
해당 문서는 '이것이 코딩 테스트다 with 파이썬 - 나동빈 저'에서 정리한 글입니다.