파이썬에서 지원하는 표준 라이브러리는 굉장히 다양함
주요한 6가지 라이브러리
내장함수
print(), input()과 같은 기본 입출력 기능부터 sorted()와 같은 정렬 기능을 포함하고 있는 기본 내장 라이브러리
별도의 import 명령어 없이 바로 사용할 수 있는 내장 함수
함수 | 설명 |
input() | 사용자 입력을 받는 함수 |
print() | 출력을 하는 함수 |
sum() | 리스트와 같은 iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환 |
min() | 파라미터가 2개 이상 들어왔을 때 가장 작은 값을 반환 |
max() | 파라미터가 2개 이상 들어왔을 때 가장 큰 값을 반환 |
eval() | 수학 수식이 문자열 형식으로 들어오면 해당 수식을 계산한 결과를 반환 |
sorted() | iterable 객체가 들어왔을 때, 정렬된 결과를 반환 key 속성으로 정렬 기준을 명시할 수 있으며, reverse 속성으로 정렬된 결과 리스트를 뒤집을지의 여부를 설정할 수 있음 |
sort() | 리스트와 같은 iterable 객체는 기본으로 sort() 함수를 내장하고 있어 굳이 sorted() 함수를 사용하지 않고도 sort() 함수를 사용해서 정렬할 수 있음 |
ord() | ord()는 문자의 아스키 코드 값을 돌려주는 함수 ord() 함수는 chr() 함수와 반대 |
result = eval("(3 + 5) * 7")
print(result)
# 56
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 = lamdba x: x[1], reverse = True)
print(result)
#[('권정렬', 75), ('장범준', 50), ('박보검', 35)]
❓ iterable 객체
파이썬에서 iterable 객체는 반복 가능한 객체를 말함
리스트, 사전 자료형, 튜플 자료형 등이 이에 해당함
itertools
파이썬에서 반복되는 형태의 데이터를 처리하는 기능을 제공하는 라이브러리
순열과 조합 라이브러리를 제공
클래스 | 설명 |
permutations | 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산해줌 |
combinations | 리스트와 같은 iterrable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우(조합)를 계산함 |
product | permutations와 같이 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)를 계산함 다만 원소를 중복하여 뽑음 |
combinations_with_replacemet | combinations와 같이 리스트와 같은 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')]
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combiantions(data, 2)) # 2개를 뽑는 모든 조합 구하기
print(result)
# [('A', 'B'), ('A', 'C'), ('B', 'C')]
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')]
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
힙 기능을 제공하는 라이브러리
우선순위 큐 기능을 구현하기 위해 사용
heapq는 다익스트라 최단 경로 알고리즘을 포함해 다양한 알고리즘에서 우선순위 큐 기능을 구현하고자 할 때 사용됨
heapq외에 PriorityQueue 라이브러리를 사용할 수 있지만, 보통 heqpq가 더 빠르게 동작함
힙에 원소를 삽입할 때는 heapq, heappush() 메서드를 이용하고, 힙에서 원소를 꺼내고자 할 때는 heapq, heappop() 메서드를 이용함
힙 정렬을 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]
파이썬에서는 최대 힙을 제공하지 않음
따라서 heapq 라이브러리를 이용하여 최대 힙을 구현해야 할 때는 원소의 부호를 임시로 변경하는 방식을 사용
힙에 원소를 삽입하기 전에 잠시 부호를 반대로 바꾸었다가, 힙에서 원소를 꺼낸 뒤에서 다시 원소의 부호를 바꾸면 됨
최대 힙을 구현하여 내림차순 힙 정렬을 구현하는 예제
import heapq
def heapsort(iterable):
h = []
result = []
# 모든 원소를 차례대로 힙에 삽입
for value in iterable:
heapq,heappush(h, -vaule)
# 힙에 삽입된 모든 원소를 차례대로 꺼내어 담기
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]
'프로그래밍 > Python' 카테고리의 다른 글
Python 설치 (0) | 2021.07.12 |
---|---|
주요 라이브러리의 문법2 (0) | 2021.01.18 |
입출력 (0) | 2021.01.14 |
반복문 (0) | 2021.01.13 |
스택, 큐, 재귀 함수 (0) | 2021.01.12 |