반응형
리스트 내의 값들의 모든 조합을 구하기 위해 itertools를 사용하는것은 다 알고 있을것이다.
2021.08.06 - [<공부>/[Algorithm]] - [파이썬] 경우의 수 (순열, 조합) 구하기 - itertools
하지만, 문제를 풀다 자주 부딪히는 고민이 생겨 따로 포스팅을 하게 되었다.
바로 단일 리스트 내부 원소들의 조합을 구할때 vs 두개 이상의 리스트의 모든 원소들의 조합을 구할때 이다.
결론
- 단일 리스트에서 내부 원소들의 조합을 계산할 경우 : permutations, combinations 사용
- 두개 이상의 리스트의 모든 원소들의 조합을 계산할 경우 : product 사용
단일 리스트에서 내부 원소들의 조합을 계산할 경우
#순열
def permutation(self):
# n=3, r=2
resultList = list(set(list(itertools.permutations(["a", "b", "c"], 2))))
print("경우의 수 : {}개".format(len(resultList)))
print(*resultList, sep="\n")
#경우의 수 : 6개
#('a', 'b')
#('c', 'a')
#('a', 'c')
#('b', 'a')
#('b', 'c')
#('c', 'b')
#조합
def combinations(self):
# n=3, r=2
resultList = list(itertools.combinations(["a", "b", "c"], 2))
print("경우의 수 : {}개".format(len(resultList)))
print(*resultList, sep="\n")
#경우의 수 : 3개
#('a', 'b')
#('a', 'c')
#('b', 'c')
두개 이상의 리스트의 모든 원소들의 조합을 구할 때
def product_with_others(self):
firstList = ["A", "B", "C"]
secondList = [100, 200, 300]
thirdList = [0.001, 0.002, 0.003]
resultList = list(itertools.product(*[firstList, secondList, thirdList]))
print("경우의 수 : {}개".format(len(resultList)))
print(*resultList, sep="\n")
"""
경우의 수 : 27개
('A', 100, 0.001)
('A', 100, 0.002)
('A', 100, 0.003)
('A', 200, 0.001)
('A', 200, 0.002)
('A', 200, 0.003)
('A', 300, 0.001)
('A', 300, 0.002)
('A', 300, 0.003)
('B', 100, 0.001)
('B', 100, 0.002)
('B', 100, 0.003)
('B', 200, 0.001)
('B', 200, 0.002)
('B', 200, 0.003)
('B', 300, 0.001)
('B', 300, 0.002)
('B', 300, 0.003)
('C', 100, 0.001)
('C', 100, 0.002)
('C', 100, 0.003)
('C', 200, 0.001)
('C', 200, 0.002)
('C', 200, 0.003)
('C', 300, 0.001)
('C', 300, 0.002)
('C', 300, 0.003)
"""
반응형
'ETC > 알고리즘 이론' 카테고리의 다른 글
[알고리즘] 최단 경로 알고리즘 (Python, Java) (0) | 2021.11.25 |
---|---|
[알고리즘] 그리디 알고리즘 ( 탐욕 알고리즘 ) (Python, Java) (0) | 2021.10.19 |
[알고리즘] 경우의 수 (순열, 조합) 구하기 - itertools (Python) (0) | 2021.08.06 |
[알고리즘] 재귀함수 (Recursive Function) (0) | 2021.08.02 |
[알고리즘] 피보나치 수열(Fibonacci Sequence) 알고리즘 (JAVA) (0) | 2020.10.16 |
댓글