눈송이의 개발생활

[Python]itertools - permutations, combinations (순열과 조합) 본문

Programming Languages/Python

[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