product는 집합 간의 곱집합을 구한다.
음...
만약 당신이 조합 combination을 사용해야해서 itertools.combinations을 썼다.
길이를 3로 두었으면
1,2,3,4 중에 3개를 뽑아서 조합을 만들것이다.
그런데 1,1,1 같이 중복해서 뽑고싶으면 어떻게 하겠는가?
백준의 유레카이론에서 조합을 생각했다면 나와 같은 생각을 했을 것이다.
이때는 product를 써서 곱집합을 구하면된다.
곱집합은 a와 b집합이 있을때 그 2개의 원소들로 집합을 만드는 것이다.
1,2,3,4집합을 또 만들어서 그 두개의 곱집합을 구하면 충분히 1,1,1같은 중복된 집합을 만들 수 있을 것이다!
사용법을 익혀보자
1. 기본 사용법
import itertools
a = [1,2,3,4]
a_product = list(itertools.product(a)
print( a_product )
=> [(1,), (2,), (3,), (4,)]
인수로 a만 넣으면 a요소 중 1개만 뽑는 의미이다. 쓸모없다
2. 집합 여러개로 조합만들기 ( 각 집합을 1번씩만 참조 )
import itertools
a = [1,2,3,4]
a_product = list(itertools.product(a,a))
print( a_product )
=>[(1, 1), (1, 2), (1, 3), (1, 4), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (4, 1), (4, 2), (4, 3), (4, 4)]
import itertools
a = [1,2,3,4]
b = ['a','b','c','d']
a_product = list(itertools.product(a,b))
print( a_product )
=> [(1, 'a'), (1, 'b'), (1, 'c'), (1, 'd'), (2, 'a'), (2, 'b'), (2, 'c'), (2, 'd'), (3, 'a'), (3, 'b'), (3, 'c'), (3, 'd'), (4, 'a'), (4, 'b'), (4, 'c'), (4, 'd')]
3. 집합 여러개로 조합만들기 ( 각 집합은 여러번씩 참조 )
import itertools
a = [1,2,3,4]
b = ['a','b','c','d']
a_product = list(itertools.product(a,b, repeat=2))
print( a_product )
=> [(1, 'a', 1, 'a'), (1, 'a', 1, 'b'), (1, 'a', 1, 'c'), (1, 'a', 1, 'd'), (1, 'a', 2, 'a'), (1, 'a', 2, 'b'), (1, 'a', 2, 'c'), (1, 'a', 2, 'd'), (1, 'a', 3, 'a'), (1, 'a', 3, 'b'), (1, 'a', 3, 'c'), (1, 'a', 3, 'd'), (1, 'a', 4, 'a'), (1, 'a', 4, 'b'), (1, 'a', 4, 'c'), (1, 'a', 4, 'd'), (1, 'b', 1, 'a'), (1, 'b', 1, 'b'), (1, 'b', 1, 'c'), (1, 'b', 1, 'd'), (1, 'b', 2, 'a'), (1, 'b', 2, 'b'), (1, 'b', 2, 'c'), (1, 'b', 2, 'd'), (1, 'b', 3, 'a'), (1, 'b', 3, 'b'), (1, 'b', 3, 'c'), (1, 'b', 3, 'd'), (1, 'b', 4, 'a'), (1, 'b', 4, 'b'), (1, 'b', 4, 'c'), (1, 'b', 4, 'd'), (1, 'c', 1, 'a'), (1, 'c', 1, 'b'), (1, 'c', 1, 'c'), (1, 'c', 1, 'd'), (1, 'c', 2, 'a'), (1, 'c', 2, 'b'), (1, 'c', 2, 'c'), (1, 'c', 2, 'd'), (1, 'c', 3, 'a'), (1, 'c', 3, 'b'), (1, 'c', 3, 'c'), (1, 'c', 3, 'd'), (1, 'c', 4, 'a'), (1, 'c', 4, 'b'), (1, 'c', 4, 'c'), (1, 'c', 4, 'd'), (1, 'd', 1, 'a'), (1, 'd', 1, 'b'), (1, 'd', 1, 'c'), (1, 'd', 1, 'd'), (1, 'd', 2, 'a'), (1, 'd', 2, 'b'), (1, 'd', 2, 'c'), (1, 'd', 2, 'd'), (1, 'd', 3, 'a'), (1, 'd', 3, 'b'), (1, 'd', 3, 'c'), (1, 'd', 3, 'd'), (1, 'd', 4, 'a'), (1, 'd', 4, 'b'), (1, 'd', 4, 'c'), (1, 'd', 4, 'd'), (2, 'a', 1, 'a'), (2, 'a', 1, 'b'), (2, 'a', 1, 'c'), (2, 'a', 1, 'd'), (2, 'a', 2, 'a'), (2, 'a', 2, 'b'), (2, 'a', 2, 'c'), (2, 'a', 2, 'd'), (2, 'a', 3, 'a'), (2, 'a', 3, 'b'), (2, 'a', 3, 'c'), (2, 'a', 3, 'd'), (2, 'a', 4, 'a'), (2, 'a', 4, 'b'), (2, 'a', 4, 'c'), (2, 'a', 4, 'd'), (2, 'b', 1, 'a'), (2, 'b', 1, 'b'), (2, 'b', 1, 'c'), (2, 'b', 1, 'd'), (2, 'b', 2, 'a'), (2, 'b', 2, 'b'), (2, 'b', 2, 'c'), (2, 'b', 2, 'd'), (2, 'b', 3, 'a'), (2, 'b', 3, 'b'), (2, 'b', 3, 'c'), (2, 'b', 3, 'd'), (2, 'b', 4, 'a'), (2, 'b', 4, 'b'), (2, 'b', 4, 'c'), (2, 'b', 4, 'd'), (2, 'c', 1, 'a'), (2, 'c', 1, 'b'), (2, 'c', 1, 'c'), (2, 'c', 1, 'd'), (2, 'c', 2, 'a'), (2, 'c', 2, 'b'), (2, 'c', 2, 'c'), (2, 'c', 2, 'd'), (2, 'c', 3, 'a'), (2, 'c', 3, 'b'), (2, 'c', 3, 'c'), (2, 'c', 3, 'd'), (2, 'c', 4, 'a'), (2, 'c', 4, 'b'), (2, 'c', 4, 'c'), (2, 'c', 4, 'd'), (2, 'd', 1, 'a'), (2, 'd', 1, 'b'), (2, 'd', 1, 'c'), (2, 'd', 1, 'd'), (2, 'd', 2, 'a'), (2, 'd', 2, 'b'), (2, 'd', 2, 'c'), (2, 'd', 2, 'd'), (2, 'd', 3, 'a'), (2, 'd', 3, 'b'), (2, 'd', 3, 'c'), (2, 'd', 3, 'd'), (2, 'd', 4, 'a'), (2, 'd', 4, 'b'), (2, 'd', 4, 'c'), (2, 'd', 4, 'd'), (3, 'a', 1, 'a'), (3, 'a', 1, 'b'), (3, 'a', 1, 'c'), (3, 'a', 1, 'd'), (3, 'a', 2, 'a'), (3, 'a', 2, 'b'), (3, 'a', 2, 'c'), (3, 'a', 2, 'd'), (3, 'a', 3, 'a'), (3, 'a', 3, 'b'), (3, 'a', 3, 'c'), (3, 'a', 3, 'd'), (3, 'a', 4, 'a'), (3, 'a', 4, 'b'), (3, 'a', 4, 'c'), (3, 'a', 4, 'd'), (3, 'b', 1, 'a'), (3, 'b', 1, 'b'), (3, 'b', 1, 'c'), (3, 'b', 1, 'd'), (3, 'b', 2, 'a'), (3, 'b', 2, 'b'), (3, 'b', 2, 'c'), (3, 'b', 2, 'd'), (3, 'b', 3, 'a'), (3, 'b', 3, 'b'), (3, 'b', 3, 'c'), (3, 'b', 3, 'd'), (3, 'b', 4, 'a'), (3, 'b', 4, 'b'), (3, 'b', 4, 'c'), (3, 'b', 4, 'd'), (3, 'c', 1, 'a'), (3, 'c', 1, 'b'), (3, 'c', 1, 'c'), (3, 'c', 1, 'd'), (3, 'c', 2, 'a'), (3, 'c', 2, 'b'), (3, 'c', 2, 'c'), (3, 'c', 2, 'd'), (3, 'c', 3, 'a'), (3, 'c', 3, 'b'), (3, 'c', 3, 'c'), (3, 'c', 3, 'd'), (3, 'c', 4, 'a'), (3, 'c', 4, 'b'), (3, 'c', 4, 'c'), (3, 'c', 4, 'd'), (3, 'd', 1, 'a'), (3, 'd', 1, 'b'), (3, 'd', 1, 'c'), (3, 'd', 1, 'd'), (3, 'd', 2, 'a'), (3, 'd', 2, 'b'), (3, 'd', 2, 'c'), (3, 'd', 2, 'd'), (3, 'd', 3, 'a'), (3, 'd', 3, 'b'), (3, 'd', 3, 'c'), (3, 'd', 3, 'd'), (3, 'd', 4, 'a'), (3, 'd', 4, 'b'), (3, 'd', 4, 'c'), (3, 'd', 4, 'd'), (4, 'a', 1, 'a'), (4, 'a', 1, 'b'), (4, 'a', 1, 'c'), (4, 'a', 1, 'd'), (4, 'a', 2, 'a'), (4, 'a', 2, 'b'), (4, 'a', 2, 'c'), (4, 'a', 2, 'd'), (4, 'a', 3, 'a'), (4, 'a', 3, 'b'), (4, 'a', 3, 'c'), (4, 'a', 3, 'd'), (4, 'a', 4, 'a'), (4, 'a', 4, 'b'), (4, 'a', 4, 'c'), (4, 'a', 4, 'd'), (4, 'b', 1, 'a'), (4, 'b', 1, 'b'), (4, 'b', 1, 'c'), (4, 'b', 1, 'd'), (4, 'b', 2, 'a'), (4, 'b', 2, 'b'), (4, 'b', 2, 'c'), (4, 'b', 2, 'd'), (4, 'b', 3, 'a'), (4, 'b', 3, 'b'), (4, 'b', 3, 'c'), (4, 'b', 3, 'd'), (4, 'b', 4, 'a'), (4, 'b', 4, 'b'), (4, 'b', 4, 'c'), (4, 'b', 4, 'd'), (4, 'c', 1, 'a'), (4, 'c', 1, 'b'), (4, 'c', 1, 'c'), (4, 'c', 1, 'd'), (4, 'c', 2, 'a'), (4, 'c', 2, 'b'), (4, 'c', 2, 'c'), (4, 'c', 2, 'd'), (4, 'c', 3, 'a'), (4, 'c', 3, 'b'), (4, 'c', 3, 'c'), (4, 'c', 3, 'd'), (4, 'c', 4, 'a'), (4, 'c', 4, 'b'), (4, 'c', 4, 'c'), (4, 'c', 4, 'd'), (4, 'd', 1, 'a'), (4, 'd', 1, 'b'), (4, 'd', 1, 'c'), (4, 'd', 1, 'd'), (4, 'd', 2, 'a'), (4, 'd', 2, 'b'), (4, 'd', 2, 'c'), (4, 'd', 2, 'd'), (4, 'd', 3, 'a'), (4, 'd', 3, 'b'), (4, 'd', 3, 'c'), (4, 'd', 3, 'd'), (4, 'd', 4, 'a'), (4, 'd', 4, 'b'), (4, 'd', 4, 'c'), (4, 'd', 4, 'd')]
repeat값으로 주는 값만큼 각 집합의 원소를 가져올 수 있다.
무조건 3번쨰 값이 repeat가 아니라 repeat=값 이외의 모든 인수는 iterable한 집합으로 인식하기 때문에 항상 repeat=값 으로 정보를 줘야한다.
'개발 > Python' 카테고리의 다른 글
python 형태소 분석기 라이브러리 konlpy설치하기 (0) | 2019.05.20 |
---|---|
Ubuntu python pip 설치하기 (0) | 2019.03.28 |
python 조합 (0) | 2019.03.24 |
python 순열 (0) | 2019.03.24 |
python 유효범위 (0) | 2019.03.24 |