딱 정리
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
'🍃 Language > Python' 카테고리의 다른 글
[python] 대문자로 변환하기 upper() / capitalize() / title() (0) | 2021.07.11 |
---|---|
[python] 정규표현식과 Re모듈함수(match/search/findall/fullmatch) (0) | 2021.07.05 |
[python] String을 식으로 반환해주는 eval() 함수 (0) | 2021.06.22 |
[Python] 파이썬 enumerate 활용법 | for문을 파이썬스럽게 (0) | 2021.05.26 |
[Python] 문자열찾기 | find/startswith/endswith (0) | 2021.05.25 |
[Python] zip으로 index랑 values를 합쳐서 dict만든다 (0) | 2021.05.25 |