itertools는 「반복 처리에 필요한 영리한 도구들을 모은」 표준 라이브러리입니다.
「큰 데이터를 메모리 효율적으로 다루기」, 「반복 패턴을 한 줄로 표현하기」에 매우 강합니다.
기본 무한 반복자.
count(0, 2) — 0, 2, 4, 6, ...
끝없이 카운트.
cycle(["빨강", "파랑"]) — 빨강, 파랑, 빨강, 파랑, ...
무한 반복.
repeat("hi", 3) — "hi"를 3번.
무한 반복자는 적절히 break하지 않으면 무한 루프가 되니 조심이 필요합니다.
결합 도구.
chain([1,2], [3,4], [5]) — 여러 컬렉션을 하나로 잇기 → [1,2,3,4,5].
chain.from_iterable([[1,2],[3,4]]) — 중첩 리스트 평탄화.
zip_longest — zip이 짧은 쪽에서 멈추는 것과 달리 긴 쪽까지 채우기(부족한 값은 fillvalue).
조합·순열.
permutations([1,2,3], 2) — 순서 있는 2개 뽑기 (1,2), (2,1), (1,3), ...
combinations([1,2,3], 2) — 순서 없는 2개 뽑기 (1,2), (1,3), (2,3).
product([1,2], [3,4]) — 카르테시안 곱 (1,3), (1,4), (2,3), (2,4).
groupby.
정렬된 리스트를 키 기준으로 그룹화합니다.
data = [("a",1), ("a",2), ("b",3)].
for key, group in groupby(data, key=lambda x: x[0]): — 「a」 그룹과 「b」 그룹으로.
SQL의 GROUP BY와 비슷하며, 데이터 처리에 강력합니다.
한 줄 요약
itertools는 반복 처리를 위한 영리한 도구 모음으로, 무한 반복자(count·cycle), 결합(chain·zip_longest), 조합(permutations·combinations·product), 그룹화(groupby) 등 풍부한 함수를 제공합니다.
더 알아볼 것
- islice — 무한 반복자에서 일부만
- accumulate — 누적 합·곱
- 제너레이터로 메모리 절약