문법 · Python · intermediate

itertools 맛보기: chain · product · combinations

반복·조합을 짧게 쓸 때 쓰는 표준 라이브러리 일부.

배우기 · Python 문법 · 12분 · 8/9 · Python · stdlib

이 트랙 목차 (9)
  1. 1. 들여쓰기·타입·변수: Python 기초
  2. 2. 조건·반복: if, for, while, range
  3. 3. 리스트·슬라이스·문자열
  4. 4. 딕셔너리·집합·컴프리헨션
  5. 5. 함수·기본인자·헬퍼 나누기
  6. 6. 자주 쓰는 표준: collections 맛보기
  7. 7. 예외 기초: try · except · 입력 가드
  8. 8. itertools 맛보기: chain · product · combinations
  9. 9. 정렬 key: 커스텀 비교

왜 쓰나

이중 루프로 조합을 직접 짜도 되지만, itertools가 있으면 실수(인덱스·중복)가 줄어듭니다.
이 사이트 연습장(Pyodide)에서도 표준 라이브러리 일부를 쓸 수 있습니다.

product

from itertools import product
for a, b in product([0, 1], repeat=2):
    print(a, b)

데카르트 곱. 비트마스크 대용으로 작은 n 완전탐색에 씁니다.

combinations / permutations

from itertools import combinations
list(combinations([1, 2, 3], 2))  # (1,2),(1,3),(2,3)

순서 없는 조합, 순열이 필요하면 permutations.

chain / pairwise 감각

from itertools import chain
list(chain([1, 2], [3]))  # 1,2,3

여러 리스트를 이을 때. (버전별 pairwise는 환경에 따라 없을 수 있음)

주의

체크리스트

  1. 조합인가, 순열인가, 중복 허용인가?
  2. n이 작은가?
  3. 직접 루프가 더 읽기 쉬운가?

연습

[1,2,3,4]에서 합이 5인 두 수 조합을 combinations로 찾아 보세요.

한 줄

> 작은 완전탐색은 product/combinations, 큰 n은 다른 알고리즘.

관련 태그 문제로 바로 연습해 두면 읽기가 남습니다.

groupby 감각

정렬된 키로 묶을 때 groupby를 쓰기도 합니다.
쓰기 전에 정렬이 필요한 점을 기억하세요. 자세한 건 문서와 함께 작은 리스트로 실험하면 됩니다.

관련 짧은 원리

관련 문제