Itertools 에서 제공해주는 아주 감사한 기능들이 있습니다.
주로 유용한건 순열, 조합 계통입니다.
permutations(iterable, r=None)
:순열
주어진 iterable에서 r개의 원소로 만들 수 있는 모든 순열을 반환합니다.
순서가 중요하며, 중복을 허용하지 않습니다.
예: permutations(['A','B','C'], 2) → AB AC BA BC CA CB
nPr = n! / (n-r)!
combinations(iterable, r)
:조합
iterable에서 r개의 원소로 만들 수 있는 모든 조합을 반환합니다.
순서가 중요하지 않으며, 중복을 허용하지 않습니다.
예: combinations(['A','B','C'], 2) → AB AC BC
nPr = n! / (r! * (n-r)!)
product(*iterables, repeat=1)
:중복순열
여러 iterable의 데카르트 곱(Cartesian product)을 반환합니다.
중복 순열을 구현할 때 사용할 수 있습니다.
예: product('AB', repeat=2) → AA AB BA BB
combinations_with_replacement(iterable, r)
:중복조합
iterable에서 r개의 원소로 만들 수 있는 모든 조합을 반환하며, 원소의 중복을 허용합니다.
예: combinations_with_replacement('ABC', 2) → AA AB AC BB BC CC
count(start=0, step=1)
:start부터 시작해서 step만큼 증가하는 무한 이터레이터를 반환합니다.
예: count(10) → 10 11 12 13 14 ...
cycle(iterable)
:iterable의 원소들을 무한히 반복하는 이터레이터를 반환합니다.
예: cycle('ABC') → A B C A B C A B C ...
repeat(element, times=None)
:주어진 element를 times번 반복하는 이터레이터를 반환합니다. times가 None이면 무한히 반복합니다.
예: repeat(10, 3) → 10 10 10
chain(*iterables)
:여러 iterable을 하나의 이터레이터로 연결합니다.
예: chain('ABC', 'DEF') → A B C D E F
대신 Itertools 결과물을 iterable 처럼 사용하려니 뭔가 어색한 부분이 있습니다.
객체로 존재해 기존 iterable 의 동작을 예상하면 예상대로 동작하지 않을 수 있습니다.
사용하면서 익숙해져야합니다.
전 for 문으로 접근하는걸 좋아합니다.