from itertools import permutations
data = ['A', 'B', 'C']
result = list(permutations(data, 3)) # 데이터중 3개를 뽑아 나열(순열)
print(result) # [('A', 'B' ,'C'),('A', 'C', 'B'), ,,,,,,,, , ('C', 'B', 'A')]
from itertools import combinations
data = ['A', 'B', 'C']
result = list(combinations(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'), ,,,,,,,, , ('C', 'C')] => 9개나옴
from itertools import combinations_with_replacement
data = ['A', 'B', 'C']
result = list(combinations_with_replacement(data, 2)) # 데이터중 2개를 뽑아 순서없이 나열(중복 조합)
print(result) => [('A', 'A'),('A', 'B'), ,,,,,,,, , ('C', 'C')] =>6개 나옴
원소 삽입: heapq.heappush()
원소 꺼냄: heapq.heappop()
기본 최소 힙 코드)
import heapq
def heapsort(iterable):
h=[]
result =[]
#모든 원소 차례로 힙에 삽입
for value in iterable:
heapq.heappush(h,value); # h 에 value 를 push
# 힙의 모든 원소 꺼내기
for i in range(len(h)):
result.append(heapq.heappop())
return result
result = heapsort([2,1,3,0,5,4])
print(result) # [0,1,2,3,4,5] 최소힙 - 오름차순 정렬
'정리된 배열'에서 특정한 원소 찾을때 매우 효과적!
bisect_left(), bisect_right() 함수가 가장 중요, 둘다 시간복잡도 O(logN)
bisect_left(a,x) : 정렬 순서 유지, 리스트 a에 데이터 x를 삽입 할 가장 왼쪽 인덱스 찾음
bisect_right(a,x): 정렬 순서 유지, 리스트 a에 데이터 x를 삽입 할 가장 오른쪽 인덱스 찾음
factorial(x) => x의 팩토리얼 값 출력
sqrt(x) => x의 제곱근 출력
gcd(a,b) => a 와 b의 최대공약수 출력
상수 pi , e => 파이와 자연상수 출력