본문 바로가기

Python

[Python] itertools 순열과 조합

itertools

itertools는 효율적인 루핑을 위한 이터레이터를 만드는 함수다.

iterate는 순환하다, 반복하다라는 뜻인데 특정 패턴이 무한하게 반복되는 배열을 만들거나

배열의 값을 일괄적으로 계산하는 등의 작업을 할 수 있게 도와주는 모듈이다.

오늘 사용한 것들은 product, permutations, combinations, combinations_with_replacement 이렇게 4개가 있다.

ex)product

from itertools import product

sample1 = ["A", "B", "C", "D", "E"]
sample2 = [1, 2, 3, 4]

# 행 / 열을 구분하여 프린트 하기 위해 enumerate 사용
for i, v in enumerate(product(sample1, sample2), 1):
    print(v, end=" ")
    if i % len(sample2) == 0:
        print("")

product(*iterable)는 데카르트 곱을 구해준다.

데카르트 곱 => A집합의 x이면서 B집합에서는 y인 순서쌍들의 집합으로 A X B 의 결과값들을 출력해준다.

ex) permutations

from itertools import permutations

sample = ["A", "B", "C"]

# 원소의 개수가 3개인 순열 출력
for i in permutations(sample, 3):
    print(i)

permutations(iterable,n)는 원소의 개수가 n개인 순열을 출력해준다.

ex) combinations

from itertools import combinations

sample = ["A", "B", "C"]

# 원소의 개수가 2개인 조합 출력
for i in combinations(sample, 2):
    print(i)

combinations(iterable,n)는  원소의 개수가 n개인 조합을 구해준다.

ex) combinations_with_replacement

from itertools import combinations_with_replacement

sample = ["A", "B", "C"]

# 중복을 포함한 원소의 개수가 3개인 조합 출력
for i in combinations_with_replacement(sample, 3):
    print(i)

combinations_with_replacement(iterable,n)는  원소의 개수가 n개인 조합을 구하는데

combinations와 다르게 중복을 허용한다.


예제 코드를 직접 쳐보면서 itertools에 대해서 공부했는데,

지금은 익숙하지 않지만 나중에 알고리즘 문제를 풀 때 도움이 된다고 한다.

내용이 어려워서 정리했는데 itertools에는 다른 기능들도 많다.

실제 사용되는 예제를 보면서 사용해보고 싶지만 아직은 나중에 이야기라서 빨리 많은 문제를 풀어야겠다.