Immersion In Data

Python/이것이 코딩테스트다

[Python] 2. 주요 라이브러리

sungjunminn 2022. 11. 9. 16:51

cf) 표준 라이브러리 : 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리

라이브러리 종류

내장 함수 print(), input() 과 같은 기본 입출력 기능부터 sorted() 와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리
itertools 파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리, 순열과 조합 라이브러리 제공
heapq 힙(Heap) 기능을 제공하는 라이브러리, 우선순위 큐 기능을 구현하기 위해 사용
bisect 이진 탐색(Binary Search) 기능을 제공하는 라이브러리
collections 덱(deque), 카운터(Counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리
math 필수적인 수학적 기능을 제공하는 라이브러리, 팩토리얼, 제곱근, 최대공약수, 삼각함수, Pi같은 상수 포함

 

1. 내장 함수

별도의 import 명령어 없이 바로 사용할 수 있다.

  • sum() : 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환
result = sum([1, 2, 3, 4, 5])
print(result)
# 15
  • min() : 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환
result = min(7, 3, 5, 2)
print(result)
# 2
  • max() : 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환
result = max(7, 3, 5, 2)
print(result)
# 7
  • eval() : 해당 수식을 계산한 결과를 반환
result = eval('(3 + 5) * 7')
print(result)
# 56
  • sorted() : iterable 객체가 들어왔을 때, 정렬된 결과를 반환
# 리스트 sorted()로 정렬하기
result = sorted([9, 1, 8, 5, 4])
print(result)
result = sorted([9, 1, 8, 5, 4], reverse = True)
print(result)
# [1, 4, 5, 8, 9]
# [9, 8, 5, 4, 1]

# key를 이용한 리스트 sorted()로 정렬하기
result = sorted([('홍길동', 35), ('이순신', 75), ('아무개', 50)], key = lambda x: x[1], reverse = True)
print(result)
[('이순신', 75), ('아무개', 50), ('홍길동', 35)]

# sort() 함수를 이용한 리스트 정렬하기 
data = [9, 1, 8, 5, 4]
data.sort()
print(data)
# [1, 4, 5, 8, 9]

 

 

2. itertools

반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리이다. 

  • permutations : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다. 
from itertools import permutations

data = ['A', 'B', 'C']
result = list(permutations(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 : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다. 
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 : iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 단, 원소를 중복해서 뽑는다. 
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')]

 

 

3. 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]
# max_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)
# [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

 

 

4. bisect

정렬된 배열에서 특정한 원소를 찾아야 할 때 주로 사용되고, 배열 위치를 반환한다. 

  • bisect_left(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽 인덱스를 찾는 메서드
  • bisect_right(a, x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드

예를 들어, 정렬된 리스트 [1, 2, 4, 4, 8]이 있을 때, 새롭게 데이터 4를 삽입한다면, 

bisect_left(a, 4)와 bisect_right(a,4)는 각각 인덱스 값으로 2와 4를 반환한다. 

from bisect import bisect_left, bisect_right

a = [1, 2, 4, 4, 8]
x = 4

print(bisect_left(a, x))
print(bisect_right(a, x))
# 2
# 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 = bisect_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))

# 값이 [-1, 3] 범위에 있는 데이터 개수 출력
print(count_by_range(a, -1, 3))
# 2 
# 6

 

 

5. collections

  • deque() : Queue 라이브러리는 일반적인 큐 자료구조를 구현하는 라이브러리가 아니다. 따라서, deque()를 이용해 큐를 구현해야 한다. 
from collections import deque

data = deque([2, 3, 4])
data.appendleft(1)
data.append(5)

print(data)
print(list(data))
# deque([1, 2, 3, 4, 5])
# [1, 2, 3, 4, 5]
  • Counter() : 등장 횟수를 세는 기능, 객체가 주어졌을 때, 해당 객체 내부의 원소가 몇 번 씩 등장했는지 반환한다. 
from collections import Counter

counter = Counter(['red', 'blue', 'green', 'blue', 'blue'])

print(counter['blue']) # 'blue'가 등장한 횟수 출력
print(counter['green']) # 'green'가 등장한 횟수 출력
print(counter['red']) # 'red'가 등장한 횟수 출력
print(dict(counter)) # 사전 자료형으로 변환
# 3
# 1
# 1
# {'red': 1, 'blue': 3, 'green': 1}

 

 

6. math

수학 계산을 요구하는 문제에서 사용한다. 

import math

print(math.factorial(5)) # 팩토리얼을 출력

print(math.sqrt(7)) # 7의 제곱근을 출력

print(math.gcd(21, 14)) # 최대 공약수를 출력

print(math.pi) # 파이(pi) 출력

print(math.e) # 자연상수 e 출력

# 120
# 2.6457513110645907
# 7
# 3.141592653589793
# 2.718281828459045

 

 

 

'이것이 코딩테스트다'를 읽고 공부한 내용을 바탕으로 작성하였습니다. 

'Python > 이것이 코딩테스트다' 카테고리의 다른 글

[Python] 6. 순열과 조합  (0) 2022.11.14
[Python] 5. 구간 합 계산  (0) 2022.11.14
[Python] 4. 투 포인터  (0) 2022.11.11
[Python] 3. 에라토스테네스의 체  (0) 2022.11.10
[Python] 1. 복잡도  (0) 2022.11.08