본문 바로가기
Language/Python

[Python] 순열(permutations )과 조합(combinations)

by 카프리썬 2021. 5. 26.
728x90

딱 정리

product('ABCD', repeat=2) AA AB AC AD BA BB BC BD CA CB CC CD DA DB DC DD
permutations('ABCD', 2) AB AC AD BA BC BD CA CB CD DA DB DC
combinations('ABCD', 2) AB AC AD BC BD CD
combinations_with_replacement('ABCD', 2) AA AB AC AD BB BC BD CC CD DD

출처 https://docs.python.org/ko/3/library/itertools.html

 

 

순열 (permutations)

서로다른 n개에서 r개를 선택할때 순서를 고려하여, 중복없이 뽑을 경우의 수

  • nPr = n! / (n-r)! 

예를 들어, A B C D 에서 순서에 상관있이, 중복없이 2가지를 뽑는 모든 경우의 수는?

AB/AC/AD

BA/BC/BD

CA/CB/CD

DA/DB/DC

총 12가지가 된다. 

 

이때 순서를 고려하기 때문에 AB와 BA는 다른경우로 본다. 

 

사용법 

Python에는 순열과 조합을 손쉽게 만들어주는 모듈 itertools가 있다.

  • 형식 : permutations(객체, r) 반복가능한 객체(리스트,튜플,문자열)안에서 r개를 선택한다
  • 조건 :  from itertools import permutations를 처음에 선언해야한다.
  • 리턴값 : 객체가 되며 경우의 수에 대한 쌍을 튜플형식으로 반환한다.  

예시

permutations(객체, r) 자체가 객체가 된다. 그래서 반복문으로 print할때 각 쌍들을 튜플형식으로 가지고 있음

 

총 갯수를 구하기 위해 permutations객체의 쌍을 list로 변환해 그 길이를 구하면 된다.


조합 (combinations)

서로다른 n개에서 r개를 선택할때 순서를 고려하지 않고, 중복없이 뽑을 경우의 수

  • nCr = n! / r! (n-r)! 

예를 들어, A B C D 에서 순서를 고려하지 않고, 중복없이 2가지를 뽑는 모든 경우의 수는?

AB/AC/AD

BA/BC/BD

CA/CB/CD

DA/DB/DC

총 6가지가 된다. 

 

이때 순서를 고려하지 않기 때문에 AB와 BA는 같은 경우로 본다. 

 

사용법 

Python에는 순열과 조합을 손쉽게 만들어주는 모듈 itertools가 있다.

  • 형식 : combinations(객체, r) 반복가능한 객체(리스트,튜플,문자열)안에서 r개를 선택한다
  • 조건 :  from itertools import combinations를 처음에 선언해야한다.
  • 리턴값 : 객체가 되며 경우의 수에 대한 쌍을 튜플형식으로 반환한다.  

 

예시

combinations(객체, r) 자체가 객체가 된다. 그래서 반복문으로 print할때 각 쌍들을 튜플형식으로 가지고 있음

총 갯수를 구하기 위해 combinations객체의 쌍을 list로 변환해 그 길이를 구하면 된다.

 

 

특이사항

permutations(), combinatino() 메소드를 이용한 후에는 list나 tuplie()형식으로 바꾸어줘야한다.

그렇지 않으면 그냥 단순히 출력할때 주소에 있는 객체라고만 나오기 떄문에
원하는 값을 직접 보고 싶다면 형태를 바꿔주는게 좋다.

 

추가

product : 두개이상의 리스트에서 모든 조합구하기

items=[['a', 'b', 'c'], ['d', 'e', 'f']] 

product_list=list(product(*items))
#두개이상의 리스트에서 모든 경우의 수 결과
#[('a', 'd'), ('a', 'e'), ('a', 'f'), ('b', 'd'), ('b', 'e'), ('b', 'f'), ('c', 'd'), ('c', 'e'), ('c', 'f')]

#예쁘게 : ['ad', 'ae', 'af', 'bd', 'be', 'bf', 'cd', 'ce', 'cf']
answer=[]
for item in product_list:
        answer.append(''.join(item))
    return answer

참고

https://velog.io/@davkim1030/Python-%EC%88%9C%EC%97%B4-%EC%A1%B0%ED%95%A9-product-itertools

 

 

 

출처

 

https://mong9data.tistory.com/32

 

[파이썬/Python] 순열과 조합 (Permutation and Combination)

순열과 조합 순열 (Permutation) 순열이란 서로 다른 n개에서 r개를 선택할 때 순서를 고려하여 선택한 경우의 수를 나열하는 방법이다. 보통 Permutation의 첫 글자 P를 따서 nPr로 표현하며 계산식은

mong9data.tistory.com

 

 

반응형