눈송이의 개발생활
[Python]itertools - permutations, combinations (순열과 조합) 본문
자주 쓰이는 순열, 중복순열, 조합, 중복조합 구현하기
itertools
공식문서에 따르면 itertools는 효율적인 루핑을 위한 iterator를 만드는 함수라고 한다
해당 모듈에는 다양한 함수들이 있다
그 중 자주 나오는 순열 조합 함수들에 대해 정리해 볼 것이다
📌 permutations
from itertools import permutations
arr = [1, 2, 3, 4]
print(permutations(arr, 2))
print(list(permutations(arr, 2)))
# <itertools.permutations object at 0x000002901F607310>
# [(1, 2), (1, 3), (1, 4), (2, 1), (2, 3), (2, 4), (3, 1), (3, 2), (3, 4), (4, 1), (4, 2), (4, 3)]
permutations(list, 뽑을 개수)
위의 예시의 경우 arr에서 원소의 개수가 2인 순열을 모두 뽑은 것이다
순열은 순서를 고려하기 때문에 (1, 3)과 (3, 1)은 서로 다른 순열로 취급된다
iteroator로 반환되기 때문에 출력하기 위해서는 형변환을 해주어야 한다
📌 product
from itertools import product
arr = [1, 2, 3]
print(list(product(arr, repeat=2)))
print(list(product(arr, repeat=3)))
# [(1, 1), (1, 2), (1, 3), (2, 1), (2, 2), (2, 3), (3, 1), (3, 2), (3, 3)]
# [(1, 1, 1), (1, 1, 2), (1, 1, 3), (1, 2, 1), (1, 2, 2), (1, 2, 3), (1, 3, 1), (1, 3, 2), (1, 3, 3), (2, 1, 1), (2, 1, 2), (2, 1, 3), (2, 2, 1), (2, 2, 2), (2, 2, 3), (2, 3, 1), (2, 3, 2), (2, 3, 3), (3, 1, 1), (3, 1, 2), (3, 1, 3), (3, 2, 1), (3, 2, 2), (3, 2, 3), (3, 3, 1), (3, 3, 2), (3, 3, 3)]
product(list, 뽑을 개수)
데카르트 곱이라고 한다
중복순열 구할 때 사용하는 함수이다
repeat에 중복 포함해서 몇 개 뽑을건지 숫자를 넣어주면 된다
이 함수는 2개 이상의 배열들의 모든 조합을 구할 때에도 사용된다
arr = [1, 2, 3]
arr2 = ['A', 'B', 'C']
print(list(product(arr, arr2, repeat=1)))
# [(1, 'A'), (1, 'B'), (1, 'C'), (2, 'A'), (2, 'B'), (2, 'C'), (3, 'A'), (3, 'B'), (3, 'C')]
📌 combinations
from itertools import combinations
arr = [1, 2, 3, 4]
print(list(combinations(arr, 2)))
# [(1, 2), (1, 3), (1, 4), (2, 3), (2, 4), (3, 4)]
combinations(list, 뽑을 개수)
조합은 순서를 고려하지 않고 뽑는 것이기 때문에 순열과는 다르게 (1, 3)과 (3, 1)은 동일한 것으로 취급된다
📌 combinations_with_replacement
from itertools import combinations_with_replacement
arr = [1, 2, 3, 4]
print(list(combinations_with_replacement(arr, 2)))
# [(1, 1), (1, 2), (1, 3), (1, 4), (2, 2), (2, 3), (2, 4), (3, 3), (3, 4), (4, 4)]
combinations_with_replacement(list, 뽑을 개수)
중복조합을 뽑는 함수
'Programming Languages > Python' 카테고리의 다른 글
[Python]내장 함수 - zip() (0) | 2022.03.05 |
---|---|
[Python]자료구조 - deque (0) | 2022.01.16 |
[Python]String 관련 함수 - join, reversed (0) | 2022.01.13 |
Comments