파이썬 itertools 라이브러리: 순열, 조합 및 고급 반복 도구 활용하기
파이썬은 많은 빌트인 라이브러리를 제공하며, 그중 itertools 라이브러리는 효율적인 반복을 위한 도구를 제공합니다. 순열, 조합, 무한 반복자, 고급 반복 도구 등 다양한 기능을 포함하고 있습니다. 이 글에서는 itertools 라이브러리의 몇 가지 주요 기능에 대해 알아보겠습니다.
itertools 라이브러리의 주요 기능
1. 순열과 조합
itertools 라이브러리는 순열(permutations)과 조합(combinations)을 생성하는 함수를 제공합니다. 이들은 주어진 입력에 대한 모든 가능한 순서나 선택을 나타냅니다.
▼ 순열 예제
import itertools
for p in itertools.permutations([1, 2, 3]):
print(p)
# 출력
# (1, 2, 3)
# (1, 3, 2)
# (2, 1, 3)
# (2, 3, 1)
# (3, 1, 2)
# (3, 2, 1)
위 코드는 주어진 리스트 [1, 2, 3]의 모든 가능한 순열을 출력합니다.
▼ 조합 예제
import itertools
for c in itertools.combinations([1, 2, 3, 4], 2):
print(c)
# 출력
# (1, 2)
# (1, 3)
# (1, 4)
# (2, 3)
# (2, 4)
# (3, 4)
위 코드는 주어진 리스트 [1, 2, 3, 4]에서 2개를 선택하는 모든 가능한 조합을 출력합니다.
2. 무한 반복자
itertools는 무한하게 반복되는 반복자를 생성하는 함수도 제공합니다. 이러한 무한 반복자는 특정 상황에서 유용하게 사용될 수 있습니다. 예를 들어, 순환하는 패턴을 무한히 반복해야 하는 경우에 사용할 수 있습니다.
▼ 무한 반복자 예제
import itertools
counter = itertools.count()
print(next(counter)) # 출력: 0
print(next(counter)) # 출력: 1
print(next(counter)) # 출력: 2
itertools.count() 함수는 무한 카운터를 생성합니다. next() 함수를 호출할 때마다 카운터는 계속 증가합니다.
3. zip_longest
zip_longest 함수는 여러 이터러블을 입력으로 받아, 가장 긴 이터러블이 완료될 때까지 이터레이션을 수행합니다. zip 함수와는 달리, zip_longest는 모든 이터러블이 소진될 때까지 이터레이션을 계속하며, 부족한 요소는 fillvalue 인자에 지정된 값으로 채워집니다.
▼ zip_longest 예제
import itertools
for pair in itertools.zip_longest('ABCD', 'xy', fillvalue='-'):
print(pair)
# 출력
# ('A', 'x')
# ('B', 'y')
# ('C', '-')
# ('D', '-')
위 코드는 ‘ABCD’와 ‘xy’라는 두 개의 이터러블을 zip_longest로 묶습니다. 두 이터러블의 길이가 다르기 때문에, 짧은 이터러블 ‘xy’의 요소가 떨어지면 fillvalue 인자에 지정된 값 ‘-‘가 채워집니다.
4. chain
itertools.chain 함수는 여러 이터러블을 받아 하나의 이터러블로 연결해 줍니다. 이 함수는 여러 이터러블을 순차적으로 처리해야 할 때 유용합니다.
▼ chain 예제
import itertools
for i in itertools.chain([1, 2, 3], ['a', 'b', 'c']):
print(i)
# 출력
# 1
# 2
# 3
# a
# b
# c
위 코드는 두 이터러블 [1, 2, 3]와 [‘a’, ‘b’, ‘c’]를 하나의 이터러블로 연결하여 출력합니다.
☞ 이처럼 itertools 라이브러리는 효율적인 반복을 위한 다양한 도구를 제공합니다. 이 글에서 소개한 기능 외에도 product, cycle, repeat 등 다양한 반복 도구를 포함하고 있습니다. 이러한 도구들은 코드를 간결하게 만들고, 가독성을 향상시키며, 메모리 사용을 최적화하는 데 도움이 됩니다. 파이썬의 강력한 기능 중 하나인 이터러블과 함께 사용하면 더욱 강력한 도구가 될 수 있습니다.
참고 자료
- 파이썬 공식 문서: itertools 라이브러리 (https://docs.python.org/ko/3/library/itertools.html)
함께 보면 좋은 이전 게시글
- 파이썬 리스트 관련 함수들: 내장 함수를 활용한 리스트 관리
- 파이썬 딕셔너리의 주요 함수: keys, values, items, clear, get, in
- 파이썬 집합 자료형: 연산자 및 함수
- 파이썬 필수 내장 함수: 코드를 더 효율적으로 작성하기
- 파이썬 for문: break, continue, range 함수, 리스트 컴프리헨션 사용법
이 글이 도움이 되셨다면 공유를 부탁 드립니다. 다음 글에서 뵙겠습니다!