
파이썬 enumerate는 아주 작은 문법처럼 보이지만, 코드를 읽는 부담을 꽤 줄여줍니다. 리스트를 돌면서 값도 필요하고 순서도 필요할 때, 직접 index += 1를 관리하던 코드를 더 단순하게 바꿔주기 때문입니다.
이번 글에서는 enumerate가 왜 편한지, 기본 사용법부터 start 인자, zip과 함께 쓰는 패턴, 그리고 언제는 굳이 안 써도 되는지까지 예시 중심으로 정리하겠습니다.
기본 정의는 Python 공식 문서가 가장 간단합니다. enumerate는 count와 iterable의 값을 함께 돌려주는 내장 함수입니다.
왜 직접 index를 올리면 읽기 불편할까
items = ["apple", "banana", "kiwi"]
index = 0
for item in items:
print(index, item)
index += 1이 코드는 틀린 것은 아니지만, 반복의 핵심보다 index 관리 코드가 함께 붙어 있습니다. 즉 “무엇을 순회하는가”와 “어떻게 번호를 매기는가”가 섞입니다.
enumerate를 쓰면 왜 더 읽기 쉬울까
items = ["apple", "banana", "kiwi"]
for index, item in enumerate(items):
print(index, item)이 코드는 위치 정보와 값을 함께 쓴다는 의도가 바로 보입니다. 즉 반복문 자체가 “번호와 값 쌍을 순회한다”는 뜻을 더 분명하게 드러냅니다.
Python 문서도 enumerate(iterable, start=0)가 count와 값을 함께 돌려준다고 설명합니다. 결국 핵심은 기능보다 의도가 드러난다는 점입니다.
start 인자는 생각보다 자주 유용하다
for no, item in enumerate(items, start=1):
print(no, item)사용자에게 번호를 보여줄 때는 0보다 1부터 시작하는 편이 자연스러운 경우가 많습니다. 게시글 목록, 메뉴 번호, 순번 출력이 대표적입니다.
zip과 함께 쓰면 더 깔끔해지는 경우
names = ["A", "B", "C"]
scores = [90, 80, 95]
for idx, (name, score) in enumerate(zip(names, scores), start=1):
print(idx, name, score)두 개 이상의 리스트를 같이 돌면서 순번까지 필요하면 이 패턴이 꽤 편합니다. 보고서 출력, 테이블 렌더링, 간단한 로그 출력에서 자주 씁니다.
언제는 굳이 enumerate가 필요 없을까
- 위치 정보가 전혀 필요 없을 때
- 값만 순회하면 충분할 때
- 리스트 원소 자체가 이미 번호를 포함하고 있을 때
즉 enumerate는 “파이썬답게 보이기 위해 무조건 쓰는 문법”이 아니라, index와 값이 함께 필요할 때만 자연스럽게 등장하는 도구에 가깝습니다.
실수하기 쉬운 점
- index를 받아 놓고 실제로는 쓰지 않는 경우
- start=1이 필요한데 기본값 0으로 두는 경우
- 값 수정과 인덱스 의존 로직을 한 반복문에 너무 많이 넣는 경우
작은 문법이지만, 의도보다 복잡한 로직을 한 번에 넣으면 enumerate를 써도 코드가 다시 무거워질 수 있습니다.
마무리
작은 자동화 스크립트를 자주 쓰는 분이라면 파이썬 이미지 파일명 변경 글처럼 반복 처리 코드를 다룰 때 enumerate 감각이 자주 도움이 됩니다.
파이썬 enumerate가 편한 이유는 기능이 화려해서가 아니라, index와 값을 함께 다룬다는 의도를 더 또렷하게 보여주기 때문입니다. 직접 변수를 올리는 코드보다 반복문의 목적이 더 잘 드러납니다.
결국 좋은 파이썬 코드는 짧은 코드보다 읽는 사람이 덜 헷갈리는 코드입니다. enumerate는 바로 그 지점에서 작지만 꾸준히 도움이 되는 도구입니다.