일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 오피스
- 윈도우10
- VBA
- 윈도우11
- Outlook
- 깃
- 파이썬
- 파이썬GUI
- Windows10
- Excel
- Windows11
- pythongui
- matlab
- python3
- win32com
- 비주얼베이직
- python
- windows
- html
- git
- pandas
- office
- 파이썬3
- pyqt5
- 안드로이드
- 문자열
- 아웃룩
- 엑셀
- 파워포인트
- Android
Appia의 IT세상
파이썬[Python] List를 이용한 경우의 수 추출하기 본문
이번 포스팅은 경우의 수에 관련된 부분에 대해서 이야기를 드리고자 합니다. 수학 및 다양한 분야에서 경우의 수를 구하고, 이에 대해서 활용하고 있습니다. 저의 경우는 주로 테스트 케이스를 추출하기 위해서 이와 같은 경우의 수를 구하는 편입니다. 이와 같이 경우의 수를 추출하는 방법에 대해서 파이썬을 이용해서 이야기를 드리고자 합니다.
경우의 수를 구하는 방식에 따라, 각 맴버들의 리스트 맴버로 구해서 얻는 방법과, 각 맴버끼리 합쳐서 새로운 맴버를 구하는 2가지의 경우의 수를 구하는 방식에 대해서 접근 하고자 합니다.
각 맴버들의 리스트 맴버로 구해서 얻는 방법 - itertools 모듈을 활용한 방식
각 맴버끼리 결합하여 새로운 맴버를 구하는 방법 - 외부 모듈 없이 루프와 재귀를 활용한 경우의 수 구하기
각 맴버들의 리스트 맴버로 구해서 얻는 방법
먼저 간단한 모듈을 이용해서 경우의 수를 구하는 방식을 구하도록 해보겠습니다. 먼저, itertools모듈을 이용합니다. 그럼 다음과 같은 예제를 한번 살펴보겠습니다.
example)
import itertools a = [[1,2,3],[4,5,6],[7,8,9,10]] # 리스트 선언 # itertools.product를 활용한 경우의 수 추출 caselist = list(itertools.product(*a)) for i in caselist: print(i) | cs |
result)
(1, 4, 7) (1, 4, 8) (1, 4, 9) (1, 4, 10) (1, 5, 7) (1, 5, 8) (1, 5, 9) (1, 5, 10) (1, 6, 7) (1, 6, 8) (1, 6, 9) (1, 6, 10) (2, 4, 7) (2, 4, 8) (2, 4, 9) (2, 4, 10) (2, 5, 7) (2, 5, 8) (2, 5, 9) (2, 5, 10) (2, 6, 7) (2, 6, 8) (2, 6, 9) (2, 6, 10) (3, 4, 7) (3, 4, 8) (3, 4, 9) (3, 4, 10) (3, 5, 7) (3, 5, 8) (3, 5, 9) (3, 5, 10) (3, 6, 7) (3, 6, 8) (3, 6, 9) (3, 6, 10) | cs |
생각보다 매우 간단합니다. itertools 모듈의 product메소드를 활용해봤습니다. 이부분은 각 맴버를 통해서 리스트의 맴버로 구성을 하는 형태입니다.
각 맴버끼리 결합하여 새로운 맴버를 구하는 방법
그럼 이번에는 이런 방법이 아닌 직접 코드를 작성해서 경우의 수를 구하는 방식에 대해서 살펴보겠습니다.
example)
result = [] def cal_caseprint(input, pre_c): last = (len(input) == 1) n = len(input[0]) for i in range(n): item = pre_c + input[0][i] if last: result.append(item) else: cal_caseprint(input[1:], item) a = [['ab','cd'],['12','34'],['ff','fd']] cal_caseprint(a,'') print(result) | cs |
result)
['ab12ff', 'ab12fd', 'ab34ff', 'ab34fd', 'cd12ff', 'cd12fd', 'cd34ff', 'cd34fd'] | cs |
위의 코드를 살짝 보면 루프와 재귀를 이용하는 방식입니다
최초 last = (len(input) == 1) 를 통해서 차원수가 1차원인지 에대해서 확인합니다. 그런후에 len(input[0])을 통해서 첫번째 리스트의 갯수를 연산해서, 이를 루프로 돌립니다. 만약에 1차원이면 바로 결과 리스트(result)에 추가하고 2차원이상이면 이 부분을 토대로 재귀를 돌리는 형태입니다.
이 방법은 리스트의 맴버들을 결합하여 하나의 리스트 맴버의 구성원으로 만들어 버리는 형태입니다.
생각 보다는 코드가 복잡하지 않습니다. 간단히 살펴봤는데 원리만 잘 구상하셔서 코드를 작성하시면, 쉽게 작성이 가능합니다.
이번 포스팅으로 리스트를 이용한 경우의 수를 추출하는 방법에 대해서 살펴봤습니다. 혹시 도움이 되셨거나, 궁금하신 점이 있으시면 언제든지 댓글 및 방명록에 글 남겨주시길 바랍니다. 감사합니다.
'Python > Python 응용' 카테고리의 다른 글
파이썬[Python] 리스트 반복문에서 인덱스(index)와 값 같이 출력하기(enumerate) (1) | 2020.05.02 |
---|---|
파이썬[Python] 2개 이상의 딕셔너리(Dictionary) 합치기 (0) | 2020.04.07 |
파이썬[Python] 알파벳/숫자인지 확인하기(isalpha, isdigit, isalnum) (0) | 2020.03.14 |
파이썬[Python] 단어들의 사용빈도 확인하기 (3) | 2020.03.10 |
파이썬[Python] Dictionary(딕셔너리) 데이터 출력하기 (2) | 2020.03.09 |