(Python) 순열, 조합 쉽게 만들기
결론부터 말하자면, 라이브러리에서 불러온 함수와 직접 구현한 함수가 속도차이 10배정도를 보였다. (라이브러리가 훨씬 빠름)
파이썬 documentation에서 어떻게 구현했는지 나중에 차차 확인해봐야 할 것 같다.
1. itertools를 이용하여 순열, 조합 구현하기
1.1 순열(=permutations)
- 반복 가능한 객체(=길이가 n인)에 대해서 중복을 허용하지 않고 r개를 뽑아서 나열한다.
- 뽑힌 순서대로 나열하기 때문에 순서가 의미가 있다. (즉, 같은 값이 뽑히더라도 순서가 다르면 다른 경우의 수로 취급한다.)
- permutations(반복 가능한 객체, r)
In [1]:
from itertools import permutations for i in permutations([1,2,3,4], 2): print(i, end=" ")
(1, 2) (1, 3) (1, 4) (2, 1) (2, 3) (2, 4) (3, 1) (3, 2) (3, 4) (4, 1) (4, 2) (4, 3)
1.2 조합(=combinations)
- 반복 가능한 객체(=길이가 n인)에 대해서 중복을 허용하지 않고 r개를 뽑는다.
- 어떤 것을 뽑는지만 중요하게 보기 때문에 뽑은 순서는 고려하지 않는다.
- combinations(반복 가능한 객체, r)
In [2]:
from itertools import combinations for i in combinations([1,2,3,4], 2): print(i, end=" ")
(1, 2) (1, 3) (1, 4) (2, 3) (2, 4) (3, 4)
1.3 중복 순열(=product)
- product(반복 가능한 객체, repeat=1)
In [3]:
from itertools import product
In [4]:
for i in product([1,2,3],'ab'): print(i, end=" ")
(1, 'a') (1, 'b') (2, 'a') (2, 'b') (3, 'a') (3, 'b')
In [5]:
for i in product(range(3), range(3), range(3)): print(i, end=" ")
(0, 0, 0) (0, 0, 1) (0, 0, 2) (0, 1, 0) (0, 1, 1) (0, 1, 2) (0, 2, 0) (0, 2, 1) (0, 2, 2) (1, 0, 0) (1, 0, 1) (1, 0, 2) (1, 1, 0) (1, 1, 1) (1, 1, 2) (1, 2, 0) (1, 2, 1) (1, 2, 2) (2, 0, 0) (2, 0, 1) (2, 0, 2) (2, 1, 0) (2, 1, 1) (2, 1, 2) (2, 2, 0) (2, 2, 1) (2, 2, 2)
In [6]:
for i in product([1,2,3], repeat=2): print(i, end=" ")
(1, 1) (1, 2) (1, 3) (2, 1) (2, 2) (2, 3) (3, 1) (3, 2) (3, 3)
In [7]:
for i in product([1,2,3], repeat=3): print(i, end=" ")
(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)
1.4 중복 조합(=combinations_with_replacement)
- combinations_with_replacement(반복 가능한 객체, r)
In [8]:
from itertools import combinations_with_replacement for cwr in combinations_with_replacement([1,2,3,4], 2): print(cwr, end=" ")
(1, 1) (1, 2) (1, 3) (1, 4) (2, 2) (2, 3) (2, 4) (3, 3) (3, 4) (4, 4)
출처: https://juhee-maeng.tistory.com/91 [simPLE]
'프로그래밍 언어별 tools > 파이썬' 카테고리의 다른 글
zip 함수 정리 (0) | 2021.10.05 |
---|---|
파이썬 eval 함수 (0) | 2021.10.05 |
파이썬 우선순위 큐, 힙큐 (0) | 2021.10.02 |
리스트 정렬 sort, sorted 활용법 (0) | 2021.10.01 |
파이썬 reduce 함수 사용법 (0) | 2021.09.29 |