Python

[python] 파이썬으로 순열, 조합 구하기 :: permutation in python/ combination in python

슈퍼짱짱 2019. 11. 20. 08:00
반응형

파이썬으로 순열과 조합 구하기


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


반응형