[포스코 신재생에너지 IoT 개발자 5기] Python 9편 — 반복문(for문)

Doohee·2025년 11월 26일
post-thumbnail

지금까지는 한 번 실행되는 코드를 많이 봤는데, 실제 프로그램은 대부분

“같은 작업을 수십·수백 번 반복”

하는 구조로 돌아간다.

  • 매일 들어오는 센서 데이터 1년치를 분석

  • 건물 100개의 에너지 사용량을 순회

  • 사용자 리스트 전체에 알림 메일 보내기

이런 작업을 일일이 print() 100번 쓰면서 할 수는 없으니까,
“반복(iteration)” 구조가 필수다.

파이썬에서 반복은 크게 두 가지 축으로 간다.

  • for문 – “몇 번 / 어떤 목록을 돈다”가 비교적 명확할 때

  • while문 – “언제 끝날지 모르지만 조건이 만족될 때까지” 돌 때

이번 9편은 그중에서도 가장 많이 쓰이는 for문 + range + 컴프리헨션까지 한 번에 정리하는 파트다.

1. 반복(iteration)의 정의와 필요성

1) 반복의 정의

  • 동일한 작업(코드 블록)을 여러 번 실행하는 구조적 프로그래밍 기법

  • 파이썬에서는

    • for 문
    • while 문

    두 가지 문법으로 반복을 구현한다.

2) 반복문 사용 목적

반복문을 쓰는 핵심 이유는 세 가지로 정리할 수 있다.

  • 동일한 작업의 반복 실행

  • 가독성 & 유지보수성 향상

    • 코드가 짧고 구조가 드러난다.
  • 자동화 & 대량 처리

    • 엑셀 수만 행, 센서 수천 개도 쉽게 처리 가능

3) 반복문이 없으면?

  • 아래와 같이 동일한 코드가 계속돼서 반복된다면?

for_1

  • 줄 수가 많고, 수정이 생기면 모두 손으로 수정해야 한다.

  • "같은 패턴을 반복한다."는 의미가 코드에 드러나지 않음.

for_2

  • 반복문을 사용하여 간편하게 반복할 수 있음

  • 반복 횟수만 바꾸면 유지보수도 쉬움

2. for문 기본 개념

  • "시퀀스 / 이터러블 객체의 항목을 하나씩 꺼내어 실행 블록에 전달하는 반복문"

  • 공식 문서: for 문은 문자열, 튜플, 리스트 같은 시퀀스 또는 그 외 이터러블 객체를 순회하면서 요소들을 하나씩 꺼내 반복 실행하는 구문

3. for문의 기본 문법

1) 기본 구조

  • 변수: 각 반복마다 이터러블에서 하나씩 꺼낸 값을 받는 변수

  • 이터러블(iterable): list, tuple, str, dict, set, range 등

  • 콜론(:): 코드 블록 시작을 알리는 표시

  • 들여쓰기: 반복 블록에 포함되는 코드를 파이썬에게 알려주는 역할
    들여쓰기 안 맞추면 IndentationError

for_3

2) 사용 예시

for_4

4. for문 기본 사용

1) 문자열 반복

  • 문자열은 문자 하나하나가 요소인 시퀀스라서, 인덱스로 접근도 되고, for로 순회도 가능하다.

for_5

2) 리스트 & 튜플 반복

  • 튜플은 리스트와 거의 동일하게 순회할 수 있고, 튜플 언패킹(구조 분해)을 이용하면 한 번에 여러 값을 받을 수도 있다.

for_6

3) 딕셔너리 반복

  • key 순회

for_7

  • value 순회

  • key, value 동시 순회

for_8

4) set 반복

  • set은 중복 없고, 순서 없지만(출력 순서 예측 불가) 반복은 가능하다.

  • 실행할 때마다 출력 순서가 바뀔 수 있음(정상 동작)

for_9

실습1. for문 기본 문법 문제

문제1) 리스트의 값을 두 배로 변환하기

  • for문을 사용하여 아래 리스트의 각 값의 두 배를 계산한 결과를 새로운 리스트에 저장한 뒤 출력해보세요.

  • 주어진 리스트: numbers = [3, 6, 1, 8, 4]

for_28

✔ 출력 결과

[6, 12, 2, 16, 8]

문제2) 문자열의 길이 구해서 새 리스트 만들기

  • 아래 리스트의 단어의 길이(len)을 구해서, 길이만 담긴 새로운 리스트를 생성해 출력하세요.

  • 주어진 리스트: words = ["Apple", "Banana", "Kiwi", "Grape"]

for_29

✔ 출력 결과

[5, 6, 4, 5]

문제3) 좌표 튜플에서 x, y 좌표 나누기

  • 아래와 같은 (x, y) 형태의 좌표 튜플 리스트에서 for문 튜플 언패킹(구조 분해)을 활용하여

  • 각 좌표의 x 값만을 x_value 리스트에, y 값만을 y_value 리스트에 저장하고 각각 출력하세요.

  • 주어진 리스트: coordinates = [(1, 2), (3, 4), (5, 6), (7, 8)]

for_30

✔ 출력 결과

x좌표: [1, 3, 5, 7]
y좌표: [2, 4, 6, 8]

5. for문과 range()

1) range() 개념

  • range()는 지정된 범위의 정수 시퀀스를 만들어 주는 내장 함수, 특히 반복 횟수를 제어할 때 for문과 같이 쓰인다.

2) 기본 형태

기본 형태

for_10

  • range(stop)

for_11

  • range(start, stop)

for_12

  • range(start, stop, step)

for_13

for_14

각 인자의 의미

  • start: 시작 정수(기본값 0)

  • stop: stop - 1 까지 생성

  • step: 증가 간격 (기본값 1, 음수 가능)

실습2. for문과 range()

문제1) 입력 받은 수의 합 구하기

  • for문과 range()를 사용하여 1부터 사용자가 입력한 수까지의 합을 구해보세요.

for_31

문제2) 구구단 만들기(1)

  • 사용자로부터 정수 하나를 입력 받아 해당 숫자의 구구단을 출력하는 프로그램을 작성하세요.

for_32

문제3) 3의 배수의 합 구하기

  • for문과 range()를 사용하여 1부터 100까지의 수 중 3의 배수만 골라 합을 구해 출력하세요.

for_33

문제4) 짝수이면서, 5의 배수인 수 출력하기

  • 사용자로부터 숫자 n를 입력받아,

  • 1부터 n까지 수 중에서 짝수이면서 5의 배수인 수만 출력하세요.

for_34

6. 루프 제어문 (break, continue, pass)

1) break - 반복 즉시 종료

  • break를 만나면 현재 반복문은 즉시 완전히 종료한다.

for_15

2) continue - 이번 반복만 건너뛰기

  • continue를 만나면 현재 반복만 건너뛰고, 다음 반복으로 넘어간다.

for_16

3) pass - "아직 할 일 없음" 자리 표시

  • pass는 아무 동작도 하지 않는 문장, 코드 블록이 문법상 필요하지만, 아직 구현 안 했을 때 임시로 사용.

for_17

4) for - else 구문

  • 반복이 "정상적으로 끝났을 때만" else블록이 실행되는 구조

  • break로 중간에 끊기면 else는 실행되지 않는다.

  • "어떤 조건을 만족하는 요소를 못 찾았을 때" 처리에 자주 쓰인다.

for_18

7. 중첩 for문 (Nested for)

1) 기본 개념

  • 하나의 for문 블록 안에 또 다른 for문이 들어 있는 구조, 2차원 이상의 데이터, 조합, 구구단 등에 사용

for_19

2) 기본 문법

for_20

  • 바깥 루프 1번 ⇒ 안쪽 루프 풀로 한 바퀴

  • 총 반복 횟수: len(바깥) * len(안쪽)

실습3. 중첩 for문 연습 문제

문제1) 구구단 만들기(2)

  • for문을 중첩하여 2단부터 9단까지의 구구단 전체를 출력해 보세요.

for_35

문제2) 중첩 for문 별찍기

  • 사용자로부터 정수 n을 입력받아, 별(*) 문자를 n줄에 걸쳐 출력하는 프로그램을 작성하세요.

  • 3가지 정렬 방식(왼쪽 정렬, 가운데 정렬, 오른쪽 정렬)으로 각각 구현해보세요.

왼쪽 정렬

for_36

✔ 출력 결과

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

오른쪽 정렬

for_37

✔ 출력 결과

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

가운데 정렬

for_38

✔ 출력 결과

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

8. 컴프리헨션(Comprehension)

1) 리스트 컴프리헨션 기본 개념

  • for문을 사용한 반복 + append 패턴을 한 줄로 축약해 새 리스트를 만드는 문법

2) 리스트 컴프리헨션 기본 문법

for_21

for_22

3) for문과 비교

  • 동일한 결과를 훨씬 짧고 읽기 쉬운 코드로 표현할 수 있음

for_23

4) 조건 필터 추가하기

  • 조건은 끝에 위치한다.

  • 조건이 복잡해지면 가독성이 나빠질 수 있음에 주의

for_24

5) 중첩 루프 표현

  • 중첩이 너무 깊어지면 오히려 일반 for문이 더 읽기 좋을 수 있다.

for_25

6) 딕셔너리 & 집합 컴프리헨션

  • 딕셔너리 컴프리헨션

for_26

  • 셋 컴프리헨션

for_27

7) 컴프리헨션의 장단점 정리

  • 장점

    • 코드가 짧고 간결하다.

    • "어떤 리스트(딕트 / 셋)을 만들고 싶은지"가 한눈에 보임

  • 단점

    • 조건이 많거나 중첩이 깊어지면 가독성이 저하된다.

    • 너무 복잡한 컴프리헨션은 디버깅이 어려움 ⇒ 이럴 땐 일반 for문 쓰는 게 낫다.

실습4. 리스트 컴프리헨션 연습 문제

문제1) 제곱값 리스트 만들기

  • 1부터 10까지의 숫자에 대해, 각 수의 제곱값을 요소로 갖는 리스트를 리스트 컴프리헨션으로 생성하세요.

for_39

✔ 출력 결과

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

문제2) 3의 배수만 리스트로 만들기

  • 1부터 50까지의 수 중에서 3의 배수만 포함된 리스트를 리스트 컴프리헨션으로 만들어 출력하세요.

for_40

✔ 출력 결과

[3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33, 36, 39, 42, 45, 48]

문제3) 문자열 리스트에서 길이가 5 이상인 단어만 뽑기

  • 위 리스트에서 글자 수가 5 이상인 단어들만 리스트 컴프리헨션으로 추출하여 출력하세요.

  • fruits = ["Apple", "Fig", "Banana", "Plum", "Cherry", "Pear", "Orange"]

for_41

✔ 출력 결과

['Apple', 'Banana', 'Cherry', 'Orange']

9. 실무예시 - 에너지 / IoT에서 for문 쓰는 패턴

예시1) 센서 데이터 이상치 필터링

센서값엔 튀는 값이 자주 섞인다.
for문으로 전체 데이터를 훑어 정상 범위를 벗어난 값만 추출해 이상 감지나 로그 분석에 사용한다.

for_42

예시2) 건물별 에너지 사용량 보고서용 리스트 만들기

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

for_43

예시3) 시간 × 설비 매트릭스 탐색

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

for_44

10. [한눈에 보기] for문의 전체 구조 정리

1. 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)

2. range() 핵심

  • range(stop) → 0 ~ stop-1

  • range(start, stop) → start ~ stop-1

  • range(start, stop, step) → step씩 증가/감소

  • 음수 step 가능 → 역순 반복

3. 루프 제어

  • break : 반복 즉시 종료

  • continue : 이번 반복만 건너뛰고 다음 반복

  • pass : 아무 동작 없음(자리표시용)

  • for-else : break 없이 정상 종료된 경우에만 else 실행

4. 중첩 for & 별 찍기

  • 중첩 for = 2차원 데이터, 조합, 구구단에 필수

  • 별 찍기:

    • 왼쪽 정렬: print("*" * i)

    • 오른쪽 정렬: 공백 + 별

    • 가운데 정렬: 공백 + (2*i-1) 개의 별

5. 컴프리헨션

  • 기본: [표현식 for 변수 in 이터러블]

  • 조건: [표현식 for 변수 in 이터러블 if 조건]

  • 딕셔너리: {key_expr: value_expr for ...}

  • 집합: {표현식 for ...}

  • 장점: 짧고 명확

  • 단점: 너무 복잡해지면 오히려 가독성 ↓ → 그럴 땐 그냥 for문으로

11. 아웃트로

이번 글에서는 for 문을 중심으로 반복문의 핵심 개념부터 자료형 순회, range() 활용, 제어문, 중첩 반복,
그리고 컴프리헨션까지 반복 처리에 필요한 전 과정을 하나로 정리했다.

반복문은 모든 파이썬 로직의 기반이며, 데이터 수집·정제·분석·제어처럼 반복 작업이 많은
에너지·IoT·BEMS 환경에서도 가장 높은 활용도를 가진 문법이다.

이 페이지는 이후 데일리 문제 풀이, 센서 데이터 처리, 그리고 실무 자동화 로직 작성 시에도 그대로 참고할 수 있는
“반복문 레퍼런스” 역할을 하도록 구성했다.
다음 편에서는 조건 기반 반복을 다루는 while문을 이어서 학습한다.

profile
에너지 기획 전문가로 성장하고자 합니다.

0개의 댓글