AngelPlayer`s Diary

주요 라이브러리

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

 

주요 표준 라이브러리

- 내장 함수 : print() 등이 속해 있는 기본 라이브러리

- itertools : 순열, 조합 등 반복되는 데이터 처리

- heapq : 힙 기능을 제공하며 우선순위 큐 구현 시 사용

- bisect : 이진탐색 기능을 제공

- collections : 덱, 카운터 등의 유용한 자료구조를 포함

- math : 팩토리얼, pi 등 수학적 기능을 제공

 

 

내장 함수

- sum(iterable객체) : iterable 객체가 입력으로 주어졌을 때, 모든 원소의 합을 반환

data = [1,2,3,4]
data = sum(data)
print(data) # 10

 

 

- min() : 들어온 파라미터 중 가장 작은 값 반환, iterable 객체도 사용 가능

- max() : 가장 큰 값 반환

data = [1,2,3,4]
min_data = min(data)
max_data = max(data)

print(min_data) # 1
print(max_data) # 4

 

 

- eval(문자열_수식) : 문자열 수식이 들어오면 해당 수식을 계산한 결과를 나타냄

a, b = 10, 3

result = eval("a + b")
print(result) # 13

 

 

- sorted(iterable객체) : 오름차순 정렬

- sorted(iterable객체, reverse=True) : 내림차순 정렬

data = [1,3,5,7,9,8,6,4,2]

print(sorted(data)) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
print(sorted(data, reverse=True)) # [9, 8, 7, 6, 5, 4, 3, 2, 1]

 

: 튜플 정렬 - sorted(튜플, key=람다식)

tuple_data = [('가나다', 1), ('차카파', 4), ('사아자', 3), ('라마바', 2)]

print(sorted(tuple_data, key=lambda x: x[1]))

 

 

 

itertools

- permutations(iterable객체, 수) : iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우(순열)을 계산

from itertools import permutations

data = ['A', 'B', 'C']

result = list(permutations(data, 2))

print(result) # [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]

 

 

- combinations(iterable객체, 수) :  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객체, repeat=수) : permutations와 동일하나 원소가 중복이 가능하다.

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객체, 수) : combinations의 기능(정렬)에서 중복이 가능한 경우

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')]

 

 

 

heapq

우선 순위 큐를 구현하고자 할 때 사용 (기본적으로 최소 힙으로 구현)

- heapq.heapush(리스트, 값) : 원소 삽입

- heapq.heapop(리스트) : 원소를 꺼낼 때 가장 작은 원소를 pop

- heapq.heapify(리스트) : 리스트 x를 즉각적으로 heap으로 변환함

 

: 원소를 힙에 전부 넣었다가 빼는 것만으로도 오름차순 정렬이 완료됨 (시간 복잡도가 NlogN)

import heapq

heap = []
result = []
heapq.heappush(heap, 1)
heapq.heappush(heap, 5)
heapq.heappush(heap, 3)

print(heap) # [1, 5, 3]

for _ in range(len(heap)):
	result.append(heapq.heappop(heap))
	
print(result) # [1, 3, 5]

 

: 파이썬의 heapq는 최대 힙을 지원하지 않는다.

-> heapq로 최대 힙을 구현하는 방법은 모든 요소에 '-'를 붙였다가 사용 시 떼면 된다.

import heapq

heap = []
result = []
heapq.heappush(heap, -1)
heapq.heappush(heap, -5)
heapq.heappush(heap, -3)

print(heap) # [-5, -1, -3]

for _ in range(len(heap)):
	result.append(heapq.heappop(heap))

print(result) # [-5, -3, -1]

 

 

 

bisect

이진 탐색을 쉽게 구현할 수 있도록 제공하는 라이브러리

: 이진 탐색 - 정렬된 데이터가 존재하는 iterable에서 특정한 값을 찾아내는 알고리즘

 

- bisect_left(리스트. 데이터) : 리스트에서 데이터를 저장할 가장 왼쪽 인덱스를 찾는 메소드

- bisect_right(리스트. 데이터) : 리스트에서 데이터를 저장할 가장 오른쪽 인덱스를 찾는 메소드

from bisect import bisect_left, bisect_right

list_data = [1,3,5,7,7,9]
#  순  서    0 1 2 3 4 5 
input_data = 7

print(bisect_left(list_data, input_data)) # 3
print(bisect_right(list_data, input_data)) # 5

 

: 이를 응용하면 몇 개가 사이에 있는지, 혹은 일치하는 수가 몇 개 있는지를 알 수 있음

# 7의 개수 구하기
left_index = bisect_left(list_data, 7)
right_index = bisect_right(list_data, 7)

print(right_index - left_index) # 2

# 3이상 7이하의 개수 구하기
left_index2 = bisect_left(list_data, 3)
right_index2 = bisect_right(list_data, 7)

print(right_index2 - left_index2) # 4

 

 

 

collections

deque - 큐(또는 스택) 구현 시에 사용됨

인덱싱, 슬라이싱 등의 기능을 사용할 수 없음 

연속적으로 나열된 데이터의 시작 부분이나 끝부분에 데이터를 삽입하거나 삭제할 때 효과적으로 사용 가능

 

- popleft() : 첫 번째 원소 제거

- pop() : 마지막 원소 제거

- appendleft(데이터) : 첫 번째 위치 원소 삽입

- append(데이터) : 마지막에 원소 삽입

: ex) 큐로 사용을 위해서는 append(), popleft()를 사용하면 됨

from collections import deque

queue = deque([1,2,3,4])
queue.popleft()
queue.append(5)

print(queue) # deque([2, 3, 4, 5])

stack = deque([1,2,3,4])
stack.pop()
stack.append(5)

print(stack) # deque([1, 2, 3, 5])

 

 

Counter - iterable 객체 내에서 원소의 등장 횟수를 count하는 기능

from collections import Counter

list_data = ['a','n','g','e','l','p','l','a','y','e','r']
counter = Counter(list_data)

print(counter['a']) # 2
print(counter['r']) # 1

 

 

 

math

- math.factorial(값) : 팩토리얼

- math.sqrt(값) : 제곱근

- math.gcd(값1, 값2) : 최대공약수

- math.pi : 파이

import math
print(math.factorial(0)) # 1

print(math.sqrt(9)) # 3.0

print(math.gcd(20, 10)) # 10

print(math.pi) # 3.141592653589793

 

공유하기

facebook twitter kakaoTalk kakaostory naver band