파이썬의 itertools 모듈에서 product, permutations, combinations, combiantions_with_replacement 를

combinatoric iterator 라고 합니다.

iterable 한 매개변수를 받아서 iterable 내부 원소의 조합을 반복하는 이터레이터를 반환합니다.

1. product(*iterables, repeat=1)

iterables들의 각 원소들의 카테시안 곱을 리턴합니다.

from itertools import product

foods = ['hamburger', 'spaghetti', 'sandwich']
amounts = [1, 2, 3]
for food, amt in product(foods, amounts):
	print(food, amt)
# hamburger 1
# hamburger 2
# hamburger 3
# spaghetti 1
# spaghetti 2
# spaghetti 3
# sandwich 1
# sandwich 2
# sandwich 3

이는 iterable의 개수만큼 다중 for 문을 돌리는 것과 같습니다.

foods = ['hamgurger', 'spaghetti', 'sandwich']
amount = [1, 2, 3]
for food in foods:
	for amt in amount:
    	print(food, amt)
# hamburger 1
# hamburger 2
# hamburger 3
# spaghetti 1
# spaghetti 2
# spaghetti 3
# sandwich 1
# sandwich 2
# sandwich 3

repeat에 지정한 수만큼 for 문이 반복됩니다.

from itertools import product

for x, y, z, w in product('abc', [1,2], repeat=2):
	print(x, y, z, w)
# a 1 a 1
# a 1 a 2
# a 1 b 1
# a 1 b 2
# a 1 c 1
# a 1 c 2
# a 2 a 1
# a 2 a 2
# a 2 b 1
# ...
# c 2 a 1
# c 2 a 2
# c 2 b 1
# c 2 b 2
# c 2 c 1
# c 2 c 2

2. permutations(iterable, r=None)

iterable의 원소들로 길이 r의 순열을 반복합니다.

r이 지정되지 않으면 iterable의 길이만큼의 순열을 반복합니다.

from itertools import permutations

for perm in permutations('abcde', 3):
	print(perm)
# ('a', 'b', 'c')
# ('a', 'b', 'd')
# ('a', 'b', 'e')
# ('a', 'c', 'b')
# ('a', 'c', 'd')
# ('a', 'c', 'e')
# ('a', 'd', 'b')
# ...
# ('e', 'b', 'c')
# ('e', 'b', 'd')
# ('e', 'c', 'a')
# ('e', 'c', 'b')
# ('e', 'c', 'd')
# ('e', 'd', 'a')
# ('e', 'd', 'b')
# ('e', 'd', 'c')

3. combinations(iterable, r)

iterable 원소들로 길이 r의 조합을 반복합니다.

from itertools import combinations

for comb in combinations('abcde', 3):
	print(comb)
# ('a', 'b', 'c')
# ('a', 'b', 'd')
# ('a', 'b', 'e')
# ('a', 'c', 'd')
# ('a', 'c', 'e')
# ('a', 'd', 'e')
# ('b', 'c', 'd')
# ('b', 'c', 'e')
# ('b', 'd', 'e')
# ('c', 'd', 'e')

4. combinations_with_replacement(iterable, r)

iterable의 원소들로 길이 r의 조합을 반복합니다.

원소의 중복을 허용합니다.

from itertools import combinations_with_replacement

for comb in combinations_with_replacement('abcde', 3):
	print(comb)
# ('a', 'a', 'a')
# ('a', 'a', 'b')
# ('a', 'a', 'c')
# ('a', 'a', 'd')
# ('a', 'a', 'e')
# ('a', 'b', 'b')
# ('a', 'b', 'c')
# ('a', 'b', 'd')
# ('a', 'b', 'e')
# ...
# ('c', 'c', 'e')
# ('c', 'd', 'd')
# ('c', 'd', 'e')
# ('c', 'e', 'e')
# ('d', 'd', 'd')
# ('d', 'd', 'e')
# ('d', 'e', 'e')
# ('e', 'e', 'e')

+ Recent posts