파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
코딩테스트에서 가장 유용하게 사용할 수 있는 클래스 : permutations
, combinations
확률과 통계 중 순열&조합 중 순열 !
리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우를 계산한다.
from itertools import permutations
result = list(permutations('ABCD', 3))
print(result)
print(len(result)) # 경우의 수 : 4 X 3 X 2
'''
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'B'), ('A', 'C', 'D'), ('A', 'D', 'B'), ('A', 'D', 'C'), ('B', 'A', 'C'), ('B', 'A', 'D'), ('B', 'C', 'A'), ('B', 'C', 'D'), ('B', 'D', 'A'), ('B', 'D', 'C'), ('C', 'A', 'B'), ('C', 'A', 'D'), ('C', 'B', 'A'), ('C', 'B', 'D'), ('C', 'D', 'A'), ('C', 'D', 'B'), ('D', 'A', 'B'), ('D', 'A', 'C'), ('D', 'B', 'A'), ('D', 'B', 'C'), ('D', 'C', 'A'), ('D', 'C', 'B')]
24
'''
data = ['A', 'B', 'C', 'D']
result = list(permutations(data, 3))
print(result) # 같은 결과 출력
'''
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'B'), ('A', 'C', 'D'), ('A', 'D', 'B'), ('A', 'D', 'C'), ('B', 'A', 'C'), ('B', 'A', 'D'), ('B', 'C', 'A'), ('B', 'C', 'D'), ('B', 'D', 'A'), ('B', 'D', 'C'), ('C', 'A', 'B'), ('C', 'A', 'D'), ('C', 'B', 'A'), ('C', 'B', 'D'), ('C', 'D', 'A'), ('C', 'D', 'B'), ('D', 'A', 'B'), ('D', 'A', 'C'), ('D', 'B', 'A'), ('D', 'B', 'C'), ('D', 'C', 'A'), ('D', 'C', 'B')]
'''
확률과 통계 중 순열&조합 중 조합 !
리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우를 계산한다.
-> permutations와 달리 순서에 상관없다
from itertools import combinations
result = list(combinations('ABCD', 3))
print(result)
print(len(result)) # 경우의 수 : 4
'''
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')]
4
'''
data = ['A', 'B', 'C', 'D']
result = list(combinations(data, 3))
print(result)
'''
[('A', 'B', 'C'), ('A', 'B', 'D'), ('A', 'C', 'D'), ('B', 'C', 'D')]
'''
permutations + 원소를 중복하여 뽑는다
이 클래스만 repeat=2 처럼 repeat 작성해야 함!
from itertools import product
result = list(product('ABC', repeat=2)) # 2개를 뽑는 모든 순열(중복 허용)
print(result)
print(len(result)) # 경우의 수 : 3 X 3
'''
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'B'), ('B', 'C'), ('C', 'A'), ('C', 'B'), ('C', 'C')]
9
'''
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 + 원소를 중복하여 뽑는다
from itertools import combinations_with_replacement
result = list(combinations_with_replacement('ABC', 2))
print(result)
print(len(result))
'''
[('A', 'A'), ('A', 'B'), ('A', 'C'), ('B', 'B'), ('B', 'C'), ('C', 'C')]
6
'''
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')]
'''
모든 결과값이 tuple 타입의 리스트로 되어있고, 오름차순 정렬 !!