
지금까지는 한 번 실행되는 코드를 많이 봤는데, 실제 프로그램은 대부분
“같은 작업을 수십·수백 번 반복”
하는 구조로 돌아간다.
매일 들어오는 센서 데이터 1년치를 분석
건물 100개의 에너지 사용량을 순회
사용자 리스트 전체에 알림 메일 보내기
이런 작업을 일일이 print() 100번 쓰면서 할 수는 없으니까,
“반복(iteration)” 구조가 필수다.
파이썬에서 반복은 크게 두 가지 축으로 간다.
for문 – “몇 번 / 어떤 목록을 돈다”가 비교적 명확할 때
while문 – “언제 끝날지 모르지만 조건이 만족될 때까지” 돌 때
이번 9편은 그중에서도 가장 많이 쓰이는 for문 + range + 컴프리헨션까지 한 번에 정리하는 파트다.
1. 반복(iteration)의 정의와 필요성
동일한 작업(코드 블록)을 여러 번 실행하는 구조적 프로그래밍 기법
파이썬에서는
for 문while 문두 가지 문법으로 반복을 구현한다.
반복문을 쓰는 핵심 이유는 세 가지로 정리할 수 있다.
동일한 작업의 반복 실행
가독성 & 유지보수성 향상
자동화 & 대량 처리

줄 수가 많고, 수정이 생기면 모두 손으로 수정해야 한다.
"같은 패턴을 반복한다."는 의미가 코드에 드러나지 않음.

반복문을 사용하여 간편하게 반복할 수 있음
반복 횟수만 바꾸면 유지보수도 쉬움
2. for문 기본 개념
"시퀀스 / 이터러블 객체의 항목을 하나씩 꺼내어 실행 블록에 전달하는 반복문"
공식 문서: for 문은 문자열, 튜플, 리스트 같은 시퀀스 또는 그 외 이터러블 객체를 순회하면서 요소들을 하나씩 꺼내 반복 실행하는 구문
3.
for문의 기본 문법
변수: 각 반복마다 이터러블에서 하나씩 꺼낸 값을 받는 변수
이터러블(iterable): list, tuple, str, dict, set, range 등
콜론(:): 코드 블록 시작을 알리는 표시
들여쓰기: 반복 블록에 포함되는 코드를 파이썬에게 알려주는 역할
들여쓰기 안 맞추면 IndentationError


4.
for문 기본 사용
for로 순회도 가능하다.

key 순회
value 순회
key, value 동시 순회

set 반복set은 중복 없고, 순서 없지만(출력 순서 예측 불가) 반복은 가능하다.
실행할 때마다 출력 순서가 바뀔 수 있음(정상 동작)

실습1.
for문 기본 문법 문제
for문을 사용하여 아래 리스트의 각 값의 두 배를 계산한 결과를 새로운 리스트에 저장한 뒤 출력해보세요.
주어진 리스트: numbers = [3, 6, 1, 8, 4]

[6, 12, 2, 16, 8]
아래 리스트의 단어의 길이(len)을 구해서, 길이만 담긴 새로운 리스트를 생성해 출력하세요.
주어진 리스트: words = ["Apple", "Banana", "Kiwi", "Grape"]

[5, 6, 4, 5]
아래와 같은 (x, y) 형태의 좌표 튜플 리스트에서 for문 튜플 언패킹(구조 분해)을 활용하여
각 좌표의 x 값만을 x_value 리스트에, y 값만을 y_value 리스트에 저장하고 각각 출력하세요.
주어진 리스트: coordinates = [(1, 2), (3, 4), (5, 6), (7, 8)]

x좌표: [1, 3, 5, 7]
y좌표: [2, 4, 6, 8]
5.
for문과range()
range() 개념range()는 지정된 범위의 정수 시퀀스를 만들어 주는 내장 함수, 특히 반복 횟수를 제어할 때 for문과 같이 쓰인다.기본 형태

range(stop)
range(start, stop)
range(start, stop, step)

각 인자의 의미
start: 시작 정수(기본값 0)
stop: stop - 1 까지 생성
step: 증가 간격 (기본값 1, 음수 가능)
실습2.
for문과range()
for문과 range()를 사용하여 1부터 사용자가 입력한 수까지의 합을 구해보세요.

for문과 range()를 사용하여 1부터 100까지의 수 중 3의 배수만 골라 합을 구해 출력하세요.
사용자로부터 숫자 n를 입력받아,
1부터 n까지 수 중에서 짝수이면서 5의 배수인 수만 출력하세요.

6. 루프 제어문 (break, continue, pass)
break - 반복 즉시 종료break를 만나면 현재 반복문은 즉시 완전히 종료한다.
continue - 이번 반복만 건너뛰기continue를 만나면 현재 반복만 건너뛰고, 다음 반복으로 넘어간다.
pass - "아직 할 일 없음" 자리 표시pass는 아무 동작도 하지 않는 문장, 코드 블록이 문법상 필요하지만, 아직 구현 안 했을 때 임시로 사용.
for - else 구문반복이 "정상적으로 끝났을 때만" else블록이 실행되는 구조
break로 중간에 끊기면 else는 실행되지 않는다.
"어떤 조건을 만족하는 요소를 못 찾았을 때" 처리에 자주 쓰인다.

7. 중첩
for문 (Nested for)
for문 블록 안에 또 다른 for문이 들어 있는 구조, 2차원 이상의 데이터, 조합, 구구단 등에 사용

바깥 루프 1번 ⇒ 안쪽 루프 풀로 한 바퀴
총 반복 횟수: len(바깥) * len(안쪽)
실습3. 중첩
for문 연습 문제
for문을 중첩하여 2단부터 9단까지의 구구단 전체를 출력해 보세요.
for문 별찍기사용자로부터 정수 n을 입력받아, 별(*) 문자를 n줄에 걸쳐 출력하는 프로그램을 작성하세요.
3가지 정렬 방식(왼쪽 정렬, 가운데 정렬, 오른쪽 정렬)으로 각각 구현해보세요.

*
**
***
****
*****

*
**
***
****
*****

*
***
*****
*******
*********
8. 컴프리헨션(Comprehension)
for문을 사용한 반복 + append 패턴을 한 줄로 축약해 새 리스트를 만드는 문법

for문과 비교
조건은 끝에 위치한다.
조건이 복잡해지면 가독성이 나빠질 수 있음에 주의

for문이 더 읽기 좋을 수 있다.


장점
코드가 짧고 간결하다.
"어떤 리스트(딕트 / 셋)을 만들고 싶은지"가 한눈에 보임
단점
조건이 많거나 중첩이 깊어지면 가독성이 저하된다.
너무 복잡한 컴프리헨션은 디버깅이 어려움 ⇒ 이럴 땐 일반 for문 쓰는 게 낫다.
실습4. 리스트 컴프리헨션 연습 문제

[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]
위 리스트에서 글자 수가 5 이상인 단어들만 리스트 컴프리헨션으로 추출하여 출력하세요.
fruits = ["Apple", "Fig", "Banana", "Plum", "Cherry", "Pear", "Orange"]

['Apple', 'Banana', 'Cherry', 'Orange']
9. 실무예시 - 에너지 / IoT에서
for문 쓰는 패턴
센서값엔 튀는 값이 자주 섞인다.
for문으로 전체 데이터를 훑어 정상 범위를 벗어난 값만 추출해 이상 감지나 로그 분석에 사용한다.

딕셔너리를 반복하면서 건물별 사용량을 바로 출력 가능한 형태로 가공하거나, 조건을 넣어 과다 사용 건물만 골라내는 용도로 활용한다.

2차원 데이터(시간 × 설비)를 중첩 for문으로 순회하면서 기준치를 넘는 값만 집계해 이상 패턴 파악·사전 점검에 활용한다.

10. [한눈에 보기]
for문의 전체 구조 정리
구조: for 변수 in 이터러블:
이터러블: list, tuple, str, dict, set, range, 기타 반복 가능한 것
딕셔너리:
for k in dict → key
for v in dict.values() → value
for k, v in dict.items() → (key, value)
range(stop) → 0 ~ stop-1
range(start, stop) → start ~ stop-1
range(start, stop, step) → step씩 증가/감소
음수 step 가능 → 역순 반복
break : 반복 즉시 종료
continue : 이번 반복만 건너뛰고 다음 반복
pass : 아무 동작 없음(자리표시용)
for-else : break 없이 정상 종료된 경우에만 else 실행
중첩 for = 2차원 데이터, 조합, 구구단에 필수
별 찍기:
왼쪽 정렬: print("*" * i)
오른쪽 정렬: 공백 + 별
가운데 정렬: 공백 + (2*i-1) 개의 별
기본: [표현식 for 변수 in 이터러블]
조건: [표현식 for 변수 in 이터러블 if 조건]
딕셔너리: {key_expr: value_expr for ...}
집합: {표현식 for ...}
장점: 짧고 명확
단점: 너무 복잡해지면 오히려 가독성 ↓ → 그럴 땐 그냥 for문으로
11. 아웃트로
이번 글에서는 for 문을 중심으로 반복문의 핵심 개념부터 자료형 순회, range() 활용, 제어문, 중첩 반복,
그리고 컴프리헨션까지 반복 처리에 필요한 전 과정을 하나로 정리했다.
반복문은 모든 파이썬 로직의 기반이며, 데이터 수집·정제·분석·제어처럼 반복 작업이 많은
에너지·IoT·BEMS 환경에서도 가장 높은 활용도를 가진 문법이다.
이 페이지는 이후 데일리 문제 풀이, 센서 데이터 처리, 그리고 실무 자동화 로직 작성 시에도 그대로 참고할 수 있는
“반복문 레퍼런스” 역할을 하도록 구성했다.
다음 편에서는 조건 기반 반복을 다루는 while문을 이어서 학습한다.