본문 바로가기

Language/Python

파이썬 순열, 조합 (permutations , combinations, product, combination_with_replacement )

반응형

1. permutations : 순열

- 개념

순열이란 순서대로 나열하는 경우의 수, 나열의 목적은 일어날 수 있는 모든 가짓수를 단 하나도 빠짐없이 보여주기 위한것이다. 또한 앞 뒤의 순서가 틀리면 서로 다룬 경우의 수이고 소유보다는 존재의 의미를 갖는다. 

예를들어 (사과, 배, 귤) 세 과일 중 두개를 보여주는 경우의 수는

[사과, 배], [사과, 귤],

[배, 사과], [배, 귤],

[귤, 사과], [귤, 배]

총 6가지 이다.

순열 공식

 

- 파이썬 permutations 사용법

permutations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우를 계산해준다.

permutations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

from itertools import permutations

data = ['사과', '배', '귤']

result = list(permutations(data, 3))

print(result)

// 결과
[('사과', '배', '귤'), ('사과', '귤', '배'), ('배', '사과', '귤'), ('배', '귤', '사과'), ('귤', '사과', '배'), ('귤', '배', '사과')]

 

2. combinations : 조합

- 개념

조합이란 어떤 것을 묶는 경우의 수이다. 보여주기 위해 나열하는 것이 아닌 본격적으로 선택하여 소유하거나 분배하기 위한 것이다. 앞 뒤 순서는 틀려도 괜찮고 다만 무엇을 선택하였는지가 중요하다.

예를 들어 (사과, 배, 귤) 세 과일 중 두 개를 가지는 경우의 수는 

[사과, 배]

[사과, 귤]

[배, 귤]

총 3가지이다.

- 공식

조합 공식

 

- 파이썬 combinations 사용법

combinations는 리스트와 같은 iterable 객체에서 r개의 데이터를 뽑아 순서를 고려하지 않고 나열하는 모든 경우를 계산한다. combinations는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

from itertools import combinations

data = ['사과', '배', '귤']

result = list(combinations(data, 2))

print(result)

// 결과
// [('사과', '배'), ('사과', '귤'), ('배', '귤')]

 

3. product : 중복 순열

- 개념

중복 순열은 일반 순열과는 다르게 선택한 것을 다시 제자리에 돌려 놓고(중복) 배열하는 것을 의미한다. 

예를 들어 (사과, 배, 귤) 세 과일 중 두 개를 중복하여 보여주는 경우의 수는

[사과, 사과], [사과, 배], [사과, 귤]

[배, 사과], [배, 배], [, 귤]

[, 사과], [, 배], [, 귤]

총 9가지이다.

- 공식

중복 순열 공식

 

- 파이썬 product 사용법

product는 permutations와 같이 리스트와 같은 inertable 객체에서 r개의 데이터를 뽑아 일렬로 나열하는 모든 경우를 계산한다. 다만 원소를 중복하여 뽑는다. product 객체를 초가화할 때는 뽑고자 하는 데이터의 수를 repeat 속성값으로 넣어준다. product는 클래스이므로 객체 초기화 이후에는 리스트 자료형으로 변환하여 사용한다.

from itertools import product

data = ['사과', '배', '귤']

result = list(product(data, repeat=2))

print(result)


//결과
// [('사과', '사과'), ('사과', '배'), ('사과', '귤'), ('배', '사과'), ('배', '배'), ('배', '귤'), ('귤', '사과'), ('귤', '배'), ('귤', '귤')]

4. combination_with_replacement: 중복 조합

- 개념

중복 조합은 순서가 상관없이, 같은 것을 똑같이 소유할 수 있으며, 어떠한 것을 소유했는지를 의미한다.

예를 들어 (사과, 배, 귤) 세 과일 중 두 개를 중복하여 소유하는 경우의 수는

[사과, 사과], [사과, 배], [사과, 귤]

[배, 배], [, 귤]

[, 귤]

총 6가지이다.

 

중복순열과 비교한다면 

[사과, 사과], [사과, 배], [사과, 귤]

[배, 사과], [배, 배], [, 귤]

[, 사과], [, 배], [, 귤]

 

똑같이 같은 것을 선택할 수 있지만 순서가 상관없으므로 이전에 선택한 것을 배제했을 때 중복 조합이 된다.

[사과, 사과], [사과, 배], [사과, 귤]

[배, 사과], [배, 배], [, 귤]

[, 사과], [, 배], [, 귤]

 

- 파이썬 combination_with_replacement 사용법

from itertools import combinations_with_replacement

data = ['사과', '배', '귤']

result = list(combinations_with_replacement(data, 3))

print(result)

// 결과
// [('사과', '사과', '사과'), ('사과', '사과', '배'), ('사과', '사과', '귤'), ('사과', '배', '배'), ('사과', '배', '귤'), ('사과', '귤', '귤'), ('배', '배', '배'), ('배', '배', '귤'), ('배', '귤', '귤'), ('귤', '귤', '귤')]

 

반응형

'Language > Python' 카테고리의 다른 글

3진법 뒤집기  (0) 2020.12.20
파이썬 heapq  (0) 2020.12.16
파이썬 알고리즘 공부할 때 알아놓으면 좋은 라이브러리  (0) 2020.12.15
파이썬 함수(function)  (0) 2020.12.14
파이썬 반복문  (0) 2020.12.14