Summary
for는 정해진 데이터 묶음을 순회할 때,while은 종료 시점을 모르는 조건 반복에 쓴다enumerate는 인덱스와 값을 동시에,zip은 여러 리스트를 병렬로 순회한다- 딕셔너리는
items()로 키와 값을 동시에 꺼낸다
들어가며
코딩으로 자동화를 구현할 때 핵심이 되는 기능이 반복문(loop)이다. 이 글에서는 Python의 대표적인 반복문 for와 while의 차이, 그리고 반복문을 더 Pythonic하게 만드는 enumerate, zip 등을 정리한다.
for와 while
반복문은 크게 “횟수가 정해진 경우”와 “조건이 만족될 때까지”로 나뉜다.
for 문 — 데이터 순회
for는 리스트·튜플·문자열 등 정해진 데이터 묶음(Iterable)을 처음부터 끝까지 하나씩 꺼내 처리할 때 쓴다. 반복 횟수가 데이터 길이만큼 명확하게 정해진다.
# CSV 파일 리스트 처리
files = ["sales_2023.csv", "sales_2024.csv", "sales_2025.csv"]
for file in files:
print(f"Processing: {file}...")
# df = pd.read_csv(file) 로직 수행while 문 — 상태 유지
while은 반복 횟수를 미리 알 수 없을 때, 특정 조건이 참인 동안 계속 반복한다. 조건이 영원히 참이면 무한 루프에 빠질 수 있어 내부에 종료 조건(break)을 반드시 고려한다.
# 서버 상태 확인 (준비될 때까지 대기)
status = "Initializing"
retry_count = 0
while status != "Ready":
status = check_server_health()
retry_count += 1
if retry_count > 5:
print("접속 실패: 시간 초과")
break
print(f"서버 대기 중... (시도: {retry_count})")비교
| 구분 | for 문 | while 문 |
|---|---|---|
| 핵심 | 데이터 순회 | 조건 유지 |
| 반복 횟수 | 예측 가능(데이터 길이만큼) | 예측 불가(조건이 바뀔 때까지) |
| 주 사용처 | 리스트/배열 처리, 단순 반복 | 무한 루프, 입력 대기, 폴링 |
| 위험성 | 낮음(끝이 있음) | 높음(무한 루프 가능성) |
Pythonic한 순회 방법
range() — 숫자 범위 생성
단순히 횟수만큼 반복하거나 인덱스 숫자가 필요할 때 쓴다.
# 0부터 4까지 (총 5회)
for i in range(5):
print(f"Epoch: {i}")
# 1부터 10까지 2씩 증가 (1, 3, 5, 7, 9)
for i in range(1, 11, 2):
print(i)enumerate() — 인덱스와 값 동시에
리스트를 돌면서 몇 번째인지도 알아야 할 때 쓴다. range(len(list)) 대신 enumerate를 쓰는 것이 Pythonic한 방식이다.
users = ["Alice", "Bob", "Charlie"]
for idx, user in enumerate(users):
print(f"{idx+1}번 유저: {user}")zip() — 여러 리스트 병렬 순회
두 개 이상의 리스트를 동시에 처리할 때 쓴다. 길이가 짧은 리스트를 기준으로 종료된다.
products = ["Notebook", "Mouse", "Keyboard"]
prices = [1200000, 50000, 150000]
for item, price in zip(products, prices):
print(f"상품명: {item} / 가격: {price:,}원")딕셔너리 순회
딕셔너리를 for에 넣으면 기본적으로 키만 나온다. 값은 values(), 키와 값을 동시에는 items()로 꺼낸다.
scores = {"Math": 90, "English": 80, "Science": 95}
for subject in scores: # 키만
print(subject)
for score in scores.values(): # 값만
print(score)
for subject, score in scores.items(): # 키와 값 동시 (가장 많이 사용)
print(f"{subject} 과목 점수: {score}")Reference