[Python] enumerate()로 순서와 값을 함께 꺼내요

차곡코딩·2일 전

Python · 기초 문법

목록 보기
5/6

리스트를 출력하다 보면 값 옆에 번호도 붙이고 싶을 때가 있어요. 공부할 주제를 1번, 2번, 3번으로 보여 주는 식이죠. 이럴 때 쓰기 좋은 함수가 enumerate()예요.

번호를 직접 늘리지 않아도 돼요

topics = ["변수", "조건문", "반복문"]

for index, topic in enumerate(topics):
    print(index, topic)

출력은 다음과 같아요.

0 변수
1 조건문
2 반복문

enumerate()는 반복할 때마다 번호와 값을 한 쌍으로 건네줘요. 기본 번호는 0부터 시작하므로, 이 예제에서는 리스트 인덱스와 같아요.

번호만 필요하다면 range()를 쓰면 되고, 값만 필요하다면 for topic in topics로 충분해요. 둘 다 필요할 때 enumerate()를 떠올리면 됩니다.

사람에게 보여 줄 번호라면 1부터 시작해요

for number, topic in enumerate(topics, start=1):
    print(f"{number}. {topic}")
1. 변수
2. 조건문
3. 반복문

start=1은 붙여 주는 번호의 시작값을 바꿔요. 리스트 자체의 인덱스를 바꾸는 것은 아니에요.

그래서 이 반복문 안에서 topics[number]로 값을 꺼내면 의도와 달라져요. 첫 번째 반복에서 이미 두 번째 원소를 가리키고, 마지막에는 범위를 벗어나요. 옆에서 함께 받은 topic을 사용하면 됩니다.

조건에 맞는 항목만 골라도 원래 번호는 남아요

minutes = [20, 45, 30, 10]

for day, minute in enumerate(minutes, start=1):
    if minute >= 30:
        print(f"{day}일차: {minute}분")
2일차: 45분
3일차: 30분

목표를 채운 날만 출력하지만 번호가 1, 2로 다시 매겨지지는 않아요. 원래 기록을 순서대로 돌면서 번호를 붙였기 때문이에요. 달성한 날을 1번부터 다시 세고 싶다면 필터링한 결과에 번호를 붙여야 해요.

빈 리스트라면 반복문 본문은 한 번도 실행되지 않아요. 별도 예외 처리 없이 자연스럽게 끝납니다.

번호가 원래 위치인지, 화면에 보여 줄 순번인지를 정해 두면 변수 이름도 고르기 쉬워요. 인덱스에는 index, 표시용 번호에는 number처럼 역할을 드러내 두려고 해요.

참고: Python 공식 문서 — enumerate

profile
비전공자의 개발 성장 기록. 바이브코딩 프리랜서 경험부터 Python·SQL·AI 서비스 개발까지

0개의 댓글