Thief of Wealth
Published 2019. 3. 24. 18:38
python itertools product 개발/Python

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
profile on loading

Loading...