파이썬의 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')
'프로그래밍언어 > 파이썬' 카테고리의 다른 글
[functools] cmp_to_key - old-style comparison function (0) | 2022.07.15 |
---|---|
[functools]함수 결과 캐싱 - cache, cached_property, lru_cache (0) | 2022.07.15 |
[파이썬]itertools - zip, zip_longest 비교 (0) | 2022.07.13 |
[파이썬]itertools - count, cycle, repeat (0) | 2022.07.13 |