zip과 enumerate는 「반복문을 더 영리하게 만드는」 두 핵심 내장 함수입니다.
for 반복문과 결합해 거의 매일 쓰이는 표현입니다.
enumerate — 「인덱스와 값을 함께」 받기.
for i, fruit in enumerate(fruits): print(i, fruit).
「몇 번째」가 필요할 때 유용합니다.
enumerate(fruits, start=1)로 1부터 시작하게도 할 수 있습니다.
zip — 「여러 컬렉션을 나란히」 순회.
names = ["홍", "김", "이"]; ages = [30, 25, 28].
for name, age in zip(names, ages): print(name, age).
C·자바라면 인덱스로 접근해야 할 일을 단순한 for 한 줄로 끝냅니다.
zip의 매력 패턴 두 가지.
1) 「딕셔너리 만들기」 — dict(zip(keys, values)) 한 줄.
2) 「행렬 전치」 — list(zip(*matrix))로 행과 열을 뒤바꿈.
행렬 [[1,2,3],[4,5,6]]을 zip(*matrix)로 처리하면 (1,4),(2,5),(3,6)이 됩니다.
주의점: zip은 가장 짧은 컬렉션 길이에서 멈춥니다.
zip([1,2,3], [4,5,6,7])은 (1,4),(2,5),(3,6) — 7은 무시.
모두 끝까지 가려면 itertools.zip_longest를 씁니다.
Python 3.10+에는 zip(strict=True) — 길이가 다르면 오류 — 옵션도 있습니다.
한 줄 요약
enumerate는 인덱스+값을 함께, zip은 여러 컬렉션을 나란히 순회합니다.
dict(zip(keys, values))로 딕셔너리 만들기, zip(*matrix)로 행렬 전치 같은 영리한 패턴이 자주 쓰입니다.
더 알아볼 것
- zip_longest — 긴 쪽까지 가는 변형
- zip(strict=True) — Python 3.10+
- 행렬 전치의 다양한 방법