itertools는 반복 가능한 데이터 스트림을 효율적으로 처리하기 위한 다양한 함수를 제공하는 파이썬 표준 라이브러리이다. 이 라이브러리를 사용하면 반복 작업을 간결하고 효율적으로 수행할 수 있다. 많은 itertools 함수들은 제네레이터의 원리를 사용하여 이터레이터를 생성하며, 필요한 시점에 값을 하나씩 생성하는 방식으로 메모리 사용을 최적화한다.
count 함수는 무한히 증가하는 정수를 생성하는 이터레이터를 반환한다.
import itertools
result = itertools.count(1, 2.5)
print(next(result)) # 1
print(next(result)) # 3.5
print(next(result)) # 6.0
print(next(result)) # 8.5
takewhile 함수는 주어진 조건을 만족하는 동안 요소를 생성한다.
import itertools
result = itertools.takewhile(lambda n: n < 10, itertools.count(1, 2.5))
for v in result:
print(v)
# 출력: 1, 3.5, 6.0, 8.5
filterfalse 함수는 주어진 조건을 만족하지 않는 요소만을 생성한다.
import itertools
result = itertools.filterfalse(lambda n: n < 3, [1, 2, 3, 4, 5])
for v in result:
print(result)
# 출력: 3, 4, 5
accumulate 함수는 주어진 이터러블의 누적 합을 계산한다.
import itertools
result = itertools.accumulate(range(1, 6))
for v in result:
print(v)
# 출력: 1, 3, 6, 10, 15
chain 함수는 여러 이터러블을 하나로 연결하여 단일 이터레이터를 생성한다.
import itertools
result = itertools.chain('ABCDE', range(1, 6))
print(list(result))
# 출력: ['A', 'B', 'C', 'D', 'E', 1, 2, 3, 4, 5]
product 함수는 주어진 이터러블의 카티전 곱을 계산한다.
import itertools
result = itertools.product('AB', repeat=2)
print(list(result))
# 출력: [('A', 'A'), ('A', 'B'), ('B', 'A'), ('B', 'B')]
groupby 함수는 주어진 이터러블을 그룹으로 묶어 반환한다.
import itertools
result = itertools.groupby('AAABBCCCCDDEEE')
for key, group in result:
print(key, ':', list(group))
# 출력:
# A : ['A', 'A', 'A']
# B : ['B', 'B']
# C : ['C', 'C', 'C', 'C']
# D : ['D', 'D']
# E : ['E', 'E', 'E']
permutations 함수는 주어진 이터러블의 모든 순열을 생성한다.
import itertools
result = itertools.permutations('ABC', 2)
print(list(result))
# 출력: [('A', 'B'), ('A', 'C'), ('B', 'A'), ('B', 'C'), ('C', 'A'), ('C', 'B')]
combinations 함수는 주어진 이터러블의 모든 조합을 생성한다.
import itertools
result = itertools.combinations('ABC', 2)
print(list(result))
# 출력: [('A', 'B'), ('A', 'C'), ('B', 'C')]