[내가 보려고 적는 파이썬] 주요 라이브러리

koyo·2020년 9월 23일
20

프로그래밍 언어

목록 보기
6/12
post-thumbnail

라이브러리

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

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



가끔 프레임워크(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)
  • 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 객체는 반복 가능한 객체를 의미한다.
    리스트, 사전 자료형, 튜플 자료형 등이 이에 해당된다.

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 파이썬 - 나동빈 저'에서 정리한 글입니다.

profile
클라우드 개발자가 될 코요입니다.

0개의 댓글