Summary

  • for는 정해진 데이터 묶음을 순회할 때, while은 종료 시점을 모르는 조건 반복에 쓴다
  • enumerate는 인덱스와 값을 동시에, zip은 여러 리스트를 병렬로 순회한다
  • 딕셔너리는 items()로 키와 값을 동시에 꺼낸다

들어가며

코딩으로 자동화를 구현할 때 핵심이 되는 기능이 반복문(loop)이다. 이 글에서는 Python의 대표적인 반복문 forwhile의 차이, 그리고 반복문을 더 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