왜 쓰나
이중 루프로 조합을 직접 짜도 되지만, 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는 환경에 따라 없을 수 있음)
주의
- n이 커지면 조합 수는 폭발합니다. 제약부터 보세요.
- 문제 풀이에서 import가 허용되는지(대개 로컬 연습은 OK) 확인하세요.
체크리스트
- 조합인가, 순열인가, 중복 허용인가?
- n이 작은가?
- 직접 루프가 더 읽기 쉬운가?
연습
[1,2,3,4]에서 합이 5인 두 수 조합을 combinations로 찾아 보세요.
한 줄
> 작은 완전탐색은 product/combinations, 큰 n은 다른 알고리즘.
관련 태그 문제로 바로 연습해 두면 읽기가 남습니다.
groupby 감각
정렬된 키로 묶을 때 groupby를 쓰기도 합니다.
쓰기 전에 정렬이 필요한 점을 기억하세요. 자세한 건 문서와 함께 작은 리스트로 실험하면 됩니다.