파이썬으로 순열과 조합 구하기
1. 순열
A B C D 에서 순서에 상관있이, 중복 없이 2가지를 뽑는 모든 경우의 수는?
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
이를 파이썬에서는 itertools 로 쉽게 구할 수 있다.
> import itertools
> pool = ['A', 'B', 'C', 'D']
> print("\n".join(list(map(' '.join, itertools.permutations(pool, 2)))))
A B
A C
A D
B A
B C
B D
C A
C B
C D
D A
D B
D C
3가지를 뽑고 싶을 때는 itertools.permutations(pool, 3) 으로 구하면 된다.
> pool = ['A', 'B', 'C', 'D']
> print("\n".join(list(map(' '.join, itertools.permutations(pool, 3)))))
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
단, 중복을 허용한다면 permutations 대신 product을 사용한다.
* repeat = n
> pool = ['A', 'B', 'C', 'D']
> print("\n".join(list(map(' '.join, itertools.product(pool, repeat=2)))))
A A
A B
A C
A D
B A
B B
B C
B D
C A
C B
C C
C D
D A
D B
D C
D D
2. 조합
순열에서와 달리 순서에 상관없이 뽑는다면, 즉, A B와 B A를 같은 것으로 보고 중복을 허용하지 않는다면 결과는 다음과 같다.
A B
A C
A D
B C
B D
C D
이를 파이썬에서는 역시나 itertools로 쉽게 구할 수 있다.
> pool = ['A', 'B', 'C', 'D']
> print("\n".join(list(map(' '.join, itertools.combinations(pool, 2)))))
A B
A C
A D
B C
B D
C D
단, 중복을 허용한다면 combinations 대신 combinations_with_replacement을 사용한다.
> pool = ['A', 'B', 'C', 'D']
> print("\n".join(list(map(' '.join, itertools.combinations_with_replacement(pool, 2)))))
A A
A B
A C
A D
B B
B C
B D
C C
C D
D D
'Python' 카테고리의 다른 글
[numpy tutorial] numpy에서 대각선 값 채우기 in python (0) | 2021.01.19 |
---|---|
[Python] Pandas 기초 (0) | 2020.01.17 |
[python] 튜플 정렬하기(두 번째 원소로 정렬하기) :: tuple sorting in python (1) | 2019.11.16 |
파이썬 numpy 기본 (numpy tutorial in python) (0) | 2019.09.09 |
[python] 이차방정식 해 구하기 in python 파이썬 (0) | 2019.08.25 |