[Python] itertools

애이용·2021년 2월 2일
0

python

목록 보기
3/7
post-thumbnail

알고리즘을 위한 python 문법 정리(3) - itertools


📌 itertools

파이썬에서 반복되는 데이터를 처리하는 기능을 포함하고 있는 라이브러리
코딩테스트에서 가장 유용하게 사용할 수 있는 클래스 : permutations, combinations

✔ permutations

확률과 통계 중 순열&조합 중 순열 !
리스트와 같은 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')]
'''

✔ combinations

확률과 통계 중 순열&조합 중 조합 !
리스트와 같은 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')]
'''

✔ product

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_with_replacement

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 타입의 리스트로 되어있고, 오름차순 정렬 !!

profile
로그를 남기자 〰️

0개의 댓글