Languages/Python

순열과 조합

잔망루피 2021. 8. 17. 13:17

1. 순열

itertools.permutations(iterable, r=None)

iterable에서 r 길이 만큼 순열을 생성해 반환

r이 주어지지 않으면, 기본값은 iterable의 길이다.

순열 튜플은 iterable의 순서에 기반해서 만들어진다.

즉, 값이 아닌 위치를 기준으로 순열이 생성된다.

 

 

2. 조합

itertools.combinations(iterable, r)

iterable에서 r 길이 만큼 조합을 생성

조합 튜플은 iterable의 순서에 기반해서 만들어진다.

즉, 값이 아닌 위치를 기준으로 조합이 생성된다.

 

from itertools import product

lst=[[1, 2], [4, 5], [7, 8]]
print(list(product(*lst)))

데카르트 곱

위의 combinations와 다른 점은 여러 개의 리스트를 넣을 수 있다.

[(1, 4, 7), (1, 4, 8), (1, 5, 7), (1, 5, 8), (2, 4, 7), (2, 4, 8), (2, 5, 7), (2, 5, 8)]가 출력된다.

# [(0, 0, 0), (0, 0, 1), (0, 1, 0), (0, 1, 1), (1, 0, 0), (1, 0, 1), (1, 1, 0), (1, 1, 1)]
print(list(product(range(2), repeat=3)))	

#[(0,), (1,)]
print(list(product(range(2)))

선택 옵션 repeat를 넣었을 때와 안 넣었을 때

repeat는 반복 횟수

 

 

from itertools import combinations_with_replacement
itertools.combinations_with_replacement(iterable, r)

중복 조합

nHr = (n+r-1)Cr = n!/r!(n-r)!

튜플 형태로 반환

 

 

 

참고 👇

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

 

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

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

docs.python.org

 

반응형

'Languages > Python' 카테고리의 다른 글

time  (0) 2021.12.30
*(packing / unpacking)  (0) 2021.09.16
reduce(function, iterable[, initializer])  (0) 2021.06.23
deque  (0) 2021.05.27
딕셔너리  (0) 2021.05.04