IT 삽질기

Python list 조합 구하기 본문

개발/python

Python list 조합 구하기

화이팅빌런 2022. 7. 28. 01:23

이번 글에서는 Python List 요소를 이용해 모든 경우의 수를 구하는 방법에 대해서 알아보자.

조합을 구하기 위해서는 itertools 에 있는 combinations를 사용하면 되는데 사용법은 매우 간단하다.

itertools

먼저 itertools에 대해서 간단히 알아보도록 하자.

itertools에 대해 공식 문서에서는 Functions creating iterators for efficient looping(효율적인 루핑을 위한 이터레이터를 만드는 함수) 라고 소개한다.

이번 글에서 알아볼 조합을 만드는 combinations 외에 순열을 만드는 함수 등 다양한 함수를 제공한다.

자세한 사항은 공식문서를 참고하기 바란다.

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

 

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 — Python 3.10.5 문서

itertools — 효율적인 루핑을 위한 이터레이터를 만드는 함수 이 모듈은 APL, Haskell 및 SML의 구성물들에서 영감을 얻은 여러 이터레이터 빌딩 블록을 구현합니다. 각각을 파이썬에 적합한 형태로

docs.python.org

combinations

combinations를 사용해 조합을 만드는 방법은 매우 간단하다.

먼저 combinations를 import 한다.

from itertools import combinations

다음으로 테스트를 위한 list를 하나 만들어보자.

test_list = [2,4,8,6,7,1,3,9,5]

이제 combinations를 사용해보자.

# combinations(list, [조합할 요소 수])
combinations(test_list, 7)

위의 코드는 test_list에서 7개의 수를 뽑아 나올 수 있는 모든 경우의 수를 반환한다.

combinations의 반환형은 itertools.combinations로 iterator 형식을 사용해야 한다.

출력 결과를 살펴보자.

1 ~ 9의 숫자 중 7개의 숫자를 골라 무작위 조합을 만들어낸 결과를 확인할 수 있다.

실제 조합의 공식에 따르면 nCr = n개의 숫자중 r개를 선택하는 경우의 수는 n! / (n-r)! * r! 의 공식이 성립하는데 이 식에 대입해보면

9! / 2! * 7! = 8*9 / 2 = 72 / 2 = 36의 경우의 수가 나와야 한다.

실제 경우의 수와 동일한지 확인해보자.

실제 경우의 수와 동일하게 list의 len이 36인 것을 확인할 수 있다.

'개발 > python' 카테고리의 다른 글

python Namedtuple 사용하기  (0) 2021.08.26
python 정규표현식 사용하기(2)  (0) 2021.08.16
python 정규표현식 사용하기(1)  (0) 2021.08.15
python datetime <-> 문자열 변경하기  (0) 2021.08.07
windows에 jupyter설치하기  (0) 2021.08.05
Comments