효율적인 루핑을 위한 이터레이터를 만드는 함수
특정 패턴이 반복되는 배열을 만들거나 값을 일괄적으로 계산하는 등의 작업 가능
이번 포스트에서는 조합형 이터레이터에 대해서 다룰 예정
from itertools import product

sample1 = ["A", "B", "C", "D", "E"] sample2 = [1, 2, 3, 4] # 행 / 열을 구분하여 프린트 하기 위해 enumerate 사용 for i, v in enumerate(product(sample1, sample2), 1): print(v, end=" ") if i % len(sample2) == 0: print("") # result output """ ('A', 1) ('A', 2) ('A', 3) ('A', 4) ('B', 1) ('B', 2) ('B', 3) ('B', 4) ('C', 1) ('C', 2) ('C', 3) ('C', 4) ('D', 1) ('D', 2) ('D', 3) ('D', 4) ('E', 1) ('E', 2) ('E', 3) ('E', 4) """
순열 : 서로 다른 n개의 원소를 가지는 어떤 집합에서 중복 없이 순서에 상관있게 r개의 원소를 선택하거나 혹은 나열하는 것
조합 : 서로 다른 n개의 원소를 가지는 어떤 집합에서 중복 없이 순서에 상관없게 r개의 원소를 선택하는 것
sample = ["A", "B", "C"] # 원소의 개수가 3개인 순열 출력 for i in permutations(sample, 3): print(i) # result output """ ('A', 'B', 'C') ('A', 'C', 'B') ('B', 'A', 'C') ('B', 'C', 'A') ('C', 'A', 'B') ('C', 'B', 'A') """
sample = ["A", "B", "C"] # 원소의 개수가 2개인 조합 출력 for i in combinations(sample, 2): print(i) # result output """ ('A', 'B') ('A', 'C') ('B', 'C') """
sample = ["A", "B", "C"] # 중복을 포함한 원소의 개수가 3개인 조합 출력 for i in combinations_with_replacement(sample, 3): print(i) # result output """ ('A', 'A', 'A') ('A', 'A', 'B') ('A', 'A', 'C') ('A', 'B', 'B') ('A', 'B', 'C') ('A', 'C', 'C') ('B', 'B', 'B') ('B', 'B', 'C') ('B', 'C', 'C') ('C', 'C', 'C') """