pythonic tools - Combinatoric iterators
itertools에는 순열과 조합에 관련된 결과를 뱉는 iterators 또한 구현되어 있다. 순열, 조합에 대한 코딩 알고리즘 문제를 종종 볼 수 있는데, itertools만 알아놔도 아주 간단히 해결이 가능하다. 못 쓰게하면 어쩔 수 없지만.
Combinatoric iterators:
product(iterable, repeat=1)
Cartesian product, 곱집합을 iterable로 던져 준다. 곱집합의 개념을 처음 봐서 시작부터 난관이었다.
Roughly equivalent to nested for-loops in a generator expression.
>>> from itertools import product
>>> count = 0
>>> for i in product(['abc', 1, 2], repeat=2):
>>> ... count+=1
>>> ... print(i)
('abc', 'abc')
('abc', 1)
('abc', 2)
(1, 'abc')
(1, 1)
(1, 2)
(2, 'abc')
(2, 1)
(2, 2)
>>> print(count)
9 # 3 ** 2
>>> count = 0
>>> for i in product('abcd', [1, 2], repeat=3):
>>> ... count+=1
>>> print(count)
512 # (4 * 2) ** 3
permutations(iterable, r=None)
해당 iterable에 대한 순열을 하나씩 던진다.
Return successive r length permutations of elements in the iterable.
>>> from itertools import permutations
>>> for i in permutations('abc', 2):
>>> ... print(i)
('a', 'b')
('a', 'c')
('b', 'a')
('b', 'c')
('c', 'a')
('c', 'b')
>>> for i in permutations('abc', 3):
>>> ... print(i)
('a', 'b', 'c')
('a', 'c', 'b')
('b', 'a', 'c')
('b', 'c', 'a')
('c', 'a', 'b')
('c', 'b', 'a')
combinations(iterable, r)
이것은 iterable의 조합 중 r 길이의 결과를 하나씩 던진다. permutations와 다르게 r 인자가 없으면 에러가 발생한다.
Return r length subsequences of elements from the input iterable.
>>> from itertools import combinations
>>> for i in combinations('abc', 1):
>>> ... print(i)
('a',)
('b',)
('c',)
>>> for i in combinations('abc', 2):
>>> ... print(i)
('a', 'b')
('a', 'c')
('b', 'c')
>>> for i in combinations('abc', 3):
>>> ... print(i)
('a', 'b', 'c')
combinations_with_replacement(iterable, r)
중복이 가능한 순열 결과를 던진다.
Return r length subsequences of elements from the input iterable allowing individual elements to be repeated more than once.
>>> from itertools import combinations_with_replacement
>>> for i in combinations_with_replacement('abc', 2):
>>> ... print(i)
('a', 'a')
('a', 'b')
('a', 'c')
('b', 'b')
('b', 'c')
('c', 'c')
>>> for i in combinations_with_replacement('abc', 3):
>>> ... print(i)
('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')
Leave a comment