itertools 라이브러리

초보개발·2022년 1월 14일
0

코딩테스트

목록 보기
5/30

1. combinations()

nCr=n!(nr)!r!\begin{aligned} {}_n{\rm C}_r=\frac{n!}{(n-r)!r!} \end{aligned}

원소 개수가 r=2r=2개인 조합 생성

import itertools

example = ['A', 'B', 'C', 'D']
ex_comb = list(itertools.combinations(example, 2))
print(ex_comb)
# [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'C'), ('B', 'D'), ('C', 'D')]

2. permutations()

nPr=n!(nr)!\begin{aligned} {}_n{\rm P}_r=\frac{n!}{(n-r)!} \end{aligned}

원소 개수가 r=2r=2개인 순열 생성

import itertools

example = ['A', 'B', 'C', 'D']
ex_perm = list(itertools.permutations(example, 2))
print(ex_perm)
# [('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'C'), ('B', 'D'), ('C', 'A'),
# ('C', 'B'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C')]

3. product()

데카르트 곱, 중복 순열

nπr=nr\begin{aligned} _{n}\pi_{r} =n^r \end{aligned}
import itertools

example = ['A', 'B', 'C', 'D']
ex_prd1 = list(itertools.product(example, repeat=2))
print(ex_prd1)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'A'), ('B', 'B'), ('B', 'C'),
# ('B', 'D'), ('C', 'A'), ('C', 'B'), ('C', 'C'), ('C', 'D'), ('D', 'A'), ('D', 'B'), ('D', 'C'), ('D', 'D')]

# a와 b의 모든 쌍을 생성
a = ['A', 'B']
b = [1, 2]
ex_prd2 = list(itertools.product(a, b, repeat=1))
print(ex_prd2)
# [('A', 1), ('A', 2), ('B', 1), ('B', 2)]

# a, b, c의 모든 쌍 생성
c = ['가', '나']
ex_prd3 = list(itertools.product(a, b, c, repeat=1))
print(ex_prd3)
# [('A', 1, '가'), ('A', 1, '나'), ('A', 2, '가'), ('A', 2, '나'), ('B', 1, '가'),
# ('B', 1, '나'), ('B', 2, '가'), ('B', 2, '나')]

4. combinations_with_replacement()

원소 개수가 2개인 중복 조합 생성

  • 순서 상관 x
import itertools

example = ['A', 'B', 'C', 'D']
ex_comb_replace = list(itertools.combinations_with_replacement(example, 2))
print(ex_comb_replace)
# [('A', 'A'), ('A', 'B'), ('A', 'C'), ('A', 'D'), ('B', 'B'), ('B', 'C'), ('B', 'D'),
# ('C', 'C'), ('C', 'D'), ('D', 'D')]

0개의 댓글