Python 강좌 / for·range·enumerate·zip으로 반복하기
for는 반복 가능한 객체의 항목을 하나씩 처리합니다. 항목만 필요하면 직접 반복하고, 위치가 필요하면 enumerate, 여러 모음을 함께 읽으려면 zip을 선택합니다.
값 반복과 숫자 범위
Python의 for는 리스트 인덱스를 직접 증가시키는 문법에 한정되지 않습니다. 리스트나 문자열을 직접 반복할 수 있습니다. range(start, stop, step)은 stop을 포함하지 않으며 step이 음수이면 감소합니다. range는 모든 숫자를 미리 담은 리스트와 다릅니다.
관련 동작과 지원 조건은 for·range·enumerate·zip으로 반복하기 관련 공식 문서에서 확인할 수 있습니다.
for value in range(1, 4):
print(value)
1, 2, 3이 차례로 출력됩니다. stop을 포함한다고 생각하면 반복 횟수를 하나 잘못 계산하기 쉽습니다.
전체 예제와 실행 결과
별도의 실습 폴더에서 아래 파일을 UTF-8로 저장합니다. 가상환경을 선택한 터미널에서 python for_loop.py 명령으로 실행합니다. macOS·Ubuntu에서 가상환경을 사용하지 않는 경우 명령 이름을 python3으로 바꿉니다.
for_loop.py 파일의 전체 내용입니다.
names = ["coffee", "lunch", "bus"]
amounts = [3500, 8000, 2500]
for number, (name, amount) in enumerate(zip(names, amounts, strict=True), start=1):
print(number, name, amount)
print(list(range(5, 0, -2)))
예상 결과는 다음과 같습니다.
1 coffee 3500 2 lunch 8000 3 bus 2500 [5, 3, 1]
enumerate와 zip의 길이 조건
enumerate는 인덱스와 항목을 함께 제공하며 start=1은 표시 번호를 1부터 시작하게 합니다. 리스트의 실제 인덱스가 바뀌는 것은 아닙니다. 예제의 이중 언패킹은 번호와 이름·금액 쌍을 각각 받는 구조입니다.
기본 zip은 가장 짧은 입력이 끝나면 중단합니다. 길이가 같아야 하는 데이터라면 strict=True로 조용한 누락을 막을 수 있습니다. 이 옵션은 Python 3.10 이상에서 지원합니다. 이름과 금액을 따로 보관하면 길이가 어긋날 수 있으므로 기록이 복잡해지면 딕셔너리 목록처럼 한 항목에 묶는 방법도 검토합니다.
반복 중 변경과 결과 확인
원본 리스트를 돌면서 같은 리스트에서 삭제하면 다음 항목을 건너뛸 수 있습니다. 삭제할 항목을 따로 모으거나 필터링한 새 결과를 만들세요. 단순히 읽는 반복과 데이터 구조를 바꾸는 작업을 구분하면 추적하기 쉽습니다.
- amounts의 마지막 항목을 지워 strict=True가 오류를 발생시키는지 확인합니다.
- strict 옵션을 빼면 두 항목만 출력되는지 비교한 뒤 원래 데이터를 복구합니다.
- range(5, 0, -2)의 끝을 -1로 바꾸어 1 다음에 -1이 포함되는지 예상하고 실행합니다.










