컴공생의 다이어리
[파이썬, Python] 주요 라이브러리의 문법과 유의점 본문
표준 라이브러리란 특정한 프로그래밍 언어에서 자주 사용되는 표준 소스코드를 미리 구현해 놓은 라이브러리를 의미한다. 파이썬에서 지원하는 표준 라이브러리는 굉장히 다양하다. 오늘은 6가지 라이브러리에 대해 알아보겠다.
- 내장함수: print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리이다. 파이썬 프로그램을 작성할 때 없어서는 안되는 필수적인 기능을 포함한다.
- itertools: 파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리이다. 순열과 조합 라이브러리를 제공한다.
- heapq: 힙(Heap) 기능을 제공하는 라이브러리이다. 우선순위 큐 기능을 구현하기 위해서 사용된다.
- bisect: 이진 탐색(Binary Search) 기능을 제공하는 라이브러리이다.
- collections: 덱(deque), 카운터(counter) 등의 유용한 자료구조를 포함하고 있는 라이브러리이다.
- math: 필수적인 수학적 기능을 제공하는 라이브러리이다. 팩토리얼, 제곱근, 최대공약수, 삼각함수 관련 함수부터 파이(pi)와 같은 상수를 포함하고 있다.
내장함수
대표적인 내장 함수는 input(), print()이다. 대표적인 함수 이 외에 다른 함수들을 예제와 함께 확인해보자.
먼저 sum() 함수는 리스트와 가은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환한다.
num=[1,2,3,4,5]
result=sum(num) #=>15
min() 함수는 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환한다.
num=[1,2,3,4,5]
result=min(num) #=>1
max() 함수는 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환한다.
num=[1,2,3,4,5]
result=max(num) #=>5
eval() 함수는 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환한다. 예를 들어 문자열 형태로 주어진 수식 (3+8)*2를 계산하는 코드는 아래와 같다.
result=eval("(3+8)*2") #=>22
sorted() 함수는 iterable 객체가 들어왔을 때, 정렬된 결과를 반환한다. key 속성으로 정렬 기준을 명시할 수 있으며, reverse 속성으로 정렬된 결과 리스트를 뒤집을지의 여부를 설정할 수 있다.
result1=sorted([5,2,1,4,3]) #오름차순으로 정렬 => 1,2,3,4,5
result2=sorted([5,2,1,4,3], reverse=Ture) #내림차순으로 정렬 => 5,4,3,2,1
리스트와 같은 iterable 객체는 기본으로 sort() 함수를 내장하고 있어서 굳이 sorted() 함수를 사용하지 않고도 아래와 같이 sort() 함수를 통해 정렬할 수 있다.
num=[5,1,4,3,2]
result=num.sort() #=> 1,2,3,4,5
itertools
itertools는 파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리이다. 제공하는 클래스는 매우 다양하지만, 이중에서 가장 유용하게 사용할 수 있는 클래스는 permutations, combinations이다.
permutations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해준다. permutations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
from itertools import permutations
data=['A', 'B', 'C'] #데이터 준비
result=list(permutations(data,3)) #모든 순열 구하기
[('A','B','C'), ('A','C','B'), ('B','A','C'), ('B','C','A'), ('C','A','B'), ('C','B','A')]
combinations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. combinations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
from itertools import combinations
data=['A', 'B', 'C'] #데이터 준비
result=list(combinations(data,2)) #2개를 뽑는 모든 조합 구하기
[('A','B'), ('A','C'), ('B','C')]
product는 permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산한다. 다만 원소를 중복하여 뽑는다. product 객체를 초기화할 때는 뽑고자 하는 데이터의 수를 repeat 속성 값으로 넣어준다. product는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.
from itertools import product
data=['A', 'B', 'C'] #데이터 준비
result=list(product(data,repeat=2)) #2개를 뽑는 모든 순열 구하기(중복 가능)
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
combinations_with_replacement는 combinations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산한다. 다만 원소를 중복해서 뽑는다. combinations_with_replacement는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용해야 한다.
from itertools import product
data=['A', 'B', 'C'] #데이터 준비
result=list(product(data,repeat=2)) #2개를 뽑는 모든 순열 구하기(중복 가능)
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
heapq
파이썬에서는 힙 기능을 위해 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]
bisect
파이썬에서는 이진 탐색을 쉽게 구현할 수 있도록 bisect 라이브러리를 제공한다. bisect 라이브러리의 bisect_left() 함수와 bisect_right() 함수가 가장 중요하게 사용된다.
- bisect_left(a,x) : 정렬된 순서를 유지하면서 리스트 a에 데이터 x를 삽입할 가장 왼쪽의 인덱스를 찾는 메서드
- bisect_right(a,x) : 정렬된 순서를 유지하도록 리스트 a에 데이터 x를 삽입할 가장 오른쪽 인덱스를 찾는 메서드
collections
파이썬의 collections 라이브러리는 유용한 자료구조를 제공하는 표준 라이브러리다. collections 라이브러리의 기능 중에서 유용하게 사용되는 클래스는 deque와 Counter이다.
파이썬에서는 deque를 사용해 큐를 구현한다. 기본 리스트 자료형은 데이터 삽입, 삭제 등의 다양한 기능을 제공한다. 리스트가 있을 때 중간에 특정한 원소를 삽입하는 것도 가능하다. 하지만 리스트 자료형은 append() 메서드로 데이터를 추가하거나, pop() 메서드로 데이터를 삭제할 때, 가장 뒤쪽 원소를 기준으로 수행된다. deque에서는 리스트 자료형과 다르게 인덱싱, 슬라이싱 등의 기능은 사용할 수 없다. 하지만 연속적으로 나열된 데이터의 시작 부분이나 끝부분에 데이터를 삽입하거나 삭제할 때는 매우 효과적이다. deque는 스택이나 큐의 기능을 모두 포함한다고 볼 수 있기 때문에 스택 혹은 큐 자료구조의 대용으로 사용될 수 있다.
deque는 첫 번째 원소를 제거할 때 popleft()를 사용하며, 마지막 원소를 제거할 때 pop()을 사용한다. 또한 첫번째 인덱스에 원소 x를 삽입할 때 appendleft(x)를 사용하며, 마지막 인덱스에 원소를 삽입할 때 append(x)를 사용한다.
따라서 deque를 큐 자료구조로 이용한다면, 원소를 삽입할 때에는 append()를 사용하고 원소를 삭제할 때에는 popleft()를 사용하면 된다. 이렇게 하면 먼저 들어온 원소가 항상 먼저 나가게 된다.
from collections import deque
data=deque([2,3,5])
data.appendleft(1)
data.append(6) #=>1,2,3,5
파이썬의 collection라이브러리의 Counter는 등장 횟수를 세는 기능을 제공한다.
from collections import Counter
cou=Counter(['red','blue','red','pink','green','red','blue'])
cou['blue'] #=>2
cou['red'] #=>3
cou['green'] #=>1
dict(cou) #=>{'red':3,'blue':2,'pink':1,'green':1}
math
math라이브러리는 자주 사용되는 수학적인 기능(팩토리얼, 제곱근, 최대공약수 등)을 포함하고 있는 라이브러리다.
factorial(x)함수는 x!를 반환한다.
import math
math.factorial(5) #=>5!=120
sqrt(x)함수는 x의 제곱근을 반환한다.
import math
math.sqrt(9) #=>3
최대 공약수를 구해야 할 때는 math라이브러리의 gcd(a,b) 함수를 이용할 수 있다. 이 함수는 a와 b의 최대 공약수를 반환한다.
import math
math.gcd(14,21) #=>7
math라이브러리는 pi나 자연상수 e를 제공한다.
import math
math.pi #=>pi
math.e #=>자연상수 e
'Development > Python & Django' 카테고리의 다른 글
[파이썬, Python] 이스케이프 코드 (0) | 2020.12.19 |
---|---|
[파이썬, Python] 숫자형을 활용하기 위한 연산자 (0) | 2020.12.19 |
[파이썬, Python] 입출력 (0) | 2020.12.14 |
[파이썬, Python] 함수 (0) | 2020.12.14 |
[파이썬, Python] 반복문 (0) | 2020.12.14 |