Itertools 를 사용하면 인생이 편해질 수 있습니다.

Ziggy Stardust·2024년 10월 11일
0

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 문으로 접근하는걸 좋아합니다.

profile
spider from mars

0개의 댓글