2021. 6. 1. 12:12ㆍpython
라이브러리
쉽게 말하면 도구의 모음을 의미하며,
소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들 이라 할 수 있다.
가끔 프레임워크(Framework)와 라이브러리가 헷갈리는 경우가 있다.
프레임워크는 프레임(Frame) + 워크(Work)의 합성어로 틀을 가지고 일하는 것. 즉,
특정 프로그램을 개발하기 위한 여러 요소들과 메뉴얼인 룰을 제공하는 프로그램
을 뜻합니다. 이 둘은 자유도에서 큰 차이점을 가진다.
표준 라이브러리
특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리를 의미한다
자주 사용되는 표준 라이브러리 6가지
- itertools
반복되는 형태의 데이터를 처리하는 기능을 제공, 순열과 조합 라이브러리르 제공 - heapq
힙(Heap) 기능을 제공하는 라이브러리, 우선순위 큐 기능을 구현 - bisect
이진 탐색(Binary Search) 기능을 제공하는 라이브러리 - collections
덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리 - math
수학적 기능을 제공하는 라이브러리
내장함수
기본 입출력 기능부터 정렬 기능을 포함하고 있는 기본 내장 라이브러리
종류
- 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)
- 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)
- sorted (iterable 객체, key=, reverse=bool): 정렬된 결과를 반환,
참고
파이썬에서 iterable 객체는 반복 가능한 객체를 의미한다.
리스트, 사전 자료형, 튜플 자료형 등이 이에 해당된다.
itertools
파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
종류
- 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)]
- products
r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다. 다만 원소를 중복하여 뽑는다.
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')]
- combinations_with_replacement
r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 다만 원소를 중복하여 뽑는다.
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')]
heapq
힙을 활용한 우선순위 큐 기능을 구현할 때 사용되며, O(NlogN)에 오름차순 정렬을 제공한다.
PriorityQueue 라이브러리가 따로 있지만, heapq가 더 빠르게 동작한다.
- heapq.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(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
이진 탐색을 쉽게 구현할 수 있도록 bisect 라이브러리를 제공함.
'정렬된 배열'에서 특정한 원소를 찾아야 할 때 매우 효과적이다.
O(logN)에 정렬된 배열에 맞는 위치를 찾아준다.
- bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에서 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
- bisect_right(a, x) : 정렬된 순서를 유지하면서 리스트 a에서 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드
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
collections
유용한 자료구조를 제공하는 라이브러리다.
주로 활용되는 자료구조로는 deque와 Counter이다.
- deque
- 파이썬에서는 일반적으로 deque를 활용해 큐를 구현한다.
- Queue 라이브러리 있지만 일반적인 큐 자료구조를 구현하는 라이브러리는 아니다.
- 리스트와 다르게 인덱싱, 슬라이싱 등의 기능은 사용할 수 없다.
- 데이터의 시작이나 끝부분에 데이터를 삽입하는데 효과적이다.
더보기리스트와 deque의 시간복잡도 비교
리스트deque
가장 앞쪽에 원소 추가 O(N) O(1) 가장 뒤쪽에 원소 추가 O(1) O(1) 가장 앞쪽에 원소 제거 O(N) O(1) 가장 뒤쪽에 원소 제거 O(1) O(1) Queue에는 deque를 활용하자!
- 함수
- popleft() : 첫 번째 원소 제거
- appendleft() : 첫 번째 원소 삽입
- pop() : 마지막 원소 제거
- append() : 마지막 원소 삽입
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}
'''
math
자주 사용되는 수학적인 기능을 포함하고 있는 라이브러리
팩토리얼, 제곱근, 최대공약수(GCD) 등을 계산해주는 기능을 포함
- 종류
- math.factorial() : 팩토리얼
- math.sqrt() : 제곱근
- math.gcd() : 최대공약수
- math.pi : 파이
- math.e : 자연상수
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 파이썬 - 나동빈 저'에서 정리한 글입니다.
'python' 카테고리의 다른 글
Python 42 - 파이썬으로 무엇을 할 수 있을까? (0) | 2021.06.03 |
---|---|
Python 41 - 파이썬 의미, 창시자, 역사 (0) | 2021.06.02 |
Python 39 - 파이썬 프레임워크 (python framework) (0) | 2021.05.31 |
Python 38 - 파이썬 용어 정리 (2) (0) | 2021.05.30 |
Python 37 - 파이썬 용어 정리 (1) (2) | 2021.05.29 |