- 내장함수: print(), input() 과 같은 기본 입출력 기능부터 sorted()와 같은 정렬기능을 포함하고 있는 기본 내장 라이브러리이다.
- itertools: 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리이다. 순열과 조합 라이브러리를 제공한다.
- heapq: 힙(Heap)기능을 제공하는 라이브러리이다. 우선순위 큐 기능을 구현하기 위해 사용한다.
- bisect: 이진 탐색(Binary Search)기능을 제공하는 라이브러리이다.
- collections: 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리이다.
- math: 필수적인 수학적 기능을 제공하는 라이브러리이다.
팩토리얼, 제곱근, 최대공약수(GCD), 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함하고 있다.
내장 함수 sorted(), sort()
# sorted ()
data_list = [3, 1, 2, 5]
data_tuple = (3, 1, 2, 5)
data_dict = [('안영우', 26), ('동생1', 23), ('동생2', 13), ('동생3', 11)]
data_dict_key = sorted([('안영우', 26), ('동생1', 23), ('동생2', 13), ('동생3', 11)], key = lambda x: x[1], reverse=True)
print(sorted(data_list))
👉🏽 [1, 2, 3, 5]
print(sorted(data_list, reverse=True))
👉🏽 [5, 3, 2, 1]
print(sorted(data_tuple))
👉🏽 [1, 2, 3, 5]
print(sorted(data_tuple, reverse=True))
👉🏽 [5, 3, 2, 1]
print(sorted(data_tuple))
👉🏽 [('동생1', 23), ('동생2', 13), ('동생3', 11), ('안영우', 26)]
print(sorted(data_tuple), lambda a: a[1])
👉🏽 [('안영우', 26), ('동생1', 23), ('동생2', 13), ('동생3', 11)]
# sort(only list)
data_list = [3, 1, 2, 5]
data_list.sort()
print(data_list)
👉🏽 [1, 2, 3, 5]
itertools
permutation(), combination()
from itertools from permutations
from itertools from product
from itertools from combinations_with_replacement
data = ['A', 'B', 'C']
## 순열
data_permutation = list(permutations(data, 2))
👉🏽 [('A', 'B'), ('B', 'A')]
# 순열(중복허용)
data_product = list(product(data, repeat = 2))
👉🏽 [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
# 조합(중복허용)
data_combination = list(combinations_with_replacement(data, 2))
👉🏽 [('A', 'A'), ('A', 'B'), ('B', 'B')]
itertools 모듈의 permutations, product, combinations_with_replacement 함수를 사용하여 주어진 데이터에서 순열, 중복을 허용한 순열, 그리고 중복을 허용한 조합을 생성하는 예제입니다.
permutations 함수를 사용하여 data 리스트에서 길이 2인 모든 순열을 생성합니다. permutations(data, 2)는 데이터 리스트에서 길이 2인 순열을 생성하는 이터레이터를 반환합니다. 이를 list 함수를 사용하여 리스트로 변환합니다. 결과적으로 data_permutation에는 ('A', 'B')와 ('B', 'A') 두 개의 순열이 저장됩니다.
product 함수를 사용하여 data 리스트에서 중복을 허용하여 길이 2인 모든 조합을 생성합니다. product(data, repeat=2)는 데이터 리스트에서 중복을 허용하여 길이 2인 조합을 생성하는 이터레이터를 반환합니다. 이를 list 함수를 사용하여 리스트로 변환합니다. 결과적으로 data_product에는 ('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B') 네 개의 조합이 저장됩니다.
combinations_with_replacement 함수를 사용하여 data 리스트에서 중복을 허용하여 길이 2인 모든 조합을 생성합니다. combinations_with_replacement(data, 2)는 데이터 리스트에서 중복을 허용하여 길이 2인 조합을 생성하는 이터레이터를 반환합니다. 이를 list 함수를 사용하여 리스트로 변환합니다. 결과적으로 data_combination에는 ('A', 'A'), ('A', 'B'), ('B', 'B') 세 개의 조합이 저장됩니다.
math 수학계산을 요구하는 기능
print(math.factorial(5))
print(int(math.sqrt(49)))
print(math.gcd(21,14))
print(math.pi)
print(math.e)
bisect
bisect(): 정렬된 배열에서 특정한 원소를 찾을 때 주로 사용하고 배열 위치를 반환한다.
- bisect_left: 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 method
- bisect_right: 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 method
예를 들어, 정렬된 리스트 [1, 2, 4, 4, 8]이 있을 때, 새롭게 데이터 4를 대입한다고 가정하면
bisect_left(a, 4)는 2가 될 것이고, bisect_right(a, 4)는 4가 될 것이다.
from bisect import bisect_left, bisect_right
# 특정한 원소의 배열 위치
a = [1, 2, 4, 4, 8]
print(bisect_left(a, 2))
👉🏽 2
print(bisect_right(a, 4))
👉🏽 4
# 값이 특정 범위에 속하는 원소의 개수
def count_by_range[a, left_value, right_value]:
right_index = bisect_right(a, right_value)
left_index = bisect_left(a, left_value)
return right_index - left_index
a = [ 1, 2, 3, 3, 3, 3, 4, 4, 8, 9]
print(count_by_range(a, 4, 4))
👉🏽 2
print(count_by_range(a, 3, 3))
👉🏽 4
# 0 ~ 9 범위의 데이터 개수
print(count_by_range(a, 1, 9))
👉🏽 10
heapq
import heapq
def heapsort(iterable):
h = []
result = []
for value in iterable:
heapq.heappush(h, value)
for i in range(leng(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]
# max_heapq
def max_heapq(iterable):
h = []
result = []
for value in iterable:
heapq.heappush(h, -value)
for i in range(leng(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]
이 코드는 heapsort 알고리즘을 구현하는 함수입니다.
- heapsort(iterable) 함수는 정렬하고자 하는 요소들을 입력받습니다. 이 요소들은 iterable로 전달되어야 합니다.
- 먼저, 빈 리스트 h와 결과를 저장할 빈 리스트 result를 생성합니다.
- iterable에서 각 요소를 가져와서 heapq.heappush(h, value)를 사용하여 h 리스트에 요소를 힙에 삽입합니다. heapq.heappush() 함수는 요소를 정렬된 순서로 삽입하기 위해 힙 자료구조에 요소를 추가하는 함수입니다.
- 힙에 모든 요소가 삽입되면, for 루프를 사용하여 heapq.heappop(h)를 호출하여 가장 작은 요소를 가져와 result 리스트에 추가합니다. heapq.heappop() 함수는 힙에서 가장 작은 요소를 제거하고 반환하는 함수입니다. 이를 len(h)번 반복하면서 힙의 모든 요소를 차례대로 가져와 정렬된 순서대로 result 리스트에 추가합니다.
- 마지막으로, 정렬된 result 리스트를 반환합니다.
위의 코드에서는 heapsort([1,3,5,7,9,2,4,6,8,0])를 호출하여 테스트하고, 결과를 출력합니다. 출력 결과는 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]가 됩니다. 이는 입력된 리스트를 힙 정렬 알고리즘을 사용하여 오름차순으로 정렬한 결과입니다.
'코딩테스트 > 파이썬 코딩테스트' 카테고리의 다른 글
사파리월드 (백준 2420번 , 파이썬) (0) | 2023.09.08 |
---|---|
백준 25083번 새싹 (Python, 파이썬) (0) | 2023.09.07 |
백준 10171번 오늘날짜 (Python, 파이썬) (0) | 2023.09.07 |
백준 10699번 오늘날짜 (Python, 파이썬) (0) | 2023.09.07 |
오답노트 1일차 (0) | 2023.07.17 |