Python 40 - 파이썬 주요 라이브러리 (python Library

2021. 6. 1. 12:12python

반응형

라이브러리

쉽게 말하면 도구의 모음을 의미하며,

소프트웨어를 개발하기 쉽게 어떤 기능을 제공하는 도구들 이라 할 수 있다.

 

가끔 프레임워크(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 파이썬 - 나동빈 저'에서 정리한 글입니다.

 

반응형