ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Python 튜토리얼 05 반복문
    Study/Python 튜토리얼 2025. 9. 25. 10:08

     

    목차

     

    1. 들어가며
    2. 반복문의 기본: 순회(Iteration)의 시작
      • 2-1. 기본적인 for문 구조
      • 2-2. range() 함수로 숫자 순회하기
    3. 반복문의 활용: 데이터 처리와 조건 결합
      • 3-1. 반복 중 데이터 가공하기
      • 3-2. if문과 함께 사용하기
      • 3-3. 인덱스(index)를 활용한 반복
    4. 실전 응용: 중첩 반복문과 복잡한 데이터 구조
      • 4-1. 2차원 리스트와 중첩 for문
      • 4-2. 중첩 리스트 데이터 처리하기
      • 4-3. 다양한 예제로 문제 해결하기
    5. 마치며

     


     

    들어가며: 파이썬의 핵심 흐름 제어, 반복문(for) 정복하기

    안녕하세요!

    이번 시간에는 파이썬의 핵심 흐름 제어 문법인 반복문에 대해 알아보겠습니다.

     

    반복문은 비슷한 작업을 여러 번 수행해야 할 때 코드를 간결하게 만들어주고,

    데이터 목록을 하나씩 처리하는 자동화 작업을 가능하게 합니다.

     

    이 글을 통해 for 반복문의 기본 개념부터 복잡한 데이터를 다루는 실전 활용 방법까지 완벽하게 익혀보세요.


    1. 반복문의 기본: 순회(Iteration)의 시작

    for문은 리스트, 문자열, 튜플 등 여러 개의 요소를 가진 데이터 구조를 처음부터 끝까지 하나씩 훑으며 코드를 실행합니다.

    1-1. 기본적인 for문 구조

    for문은 리스트와 같은 순회 가능한 객체의 각 요소를 변수에 할당하며 코드 블록을 반복 실행합니다.

    과일 = ["사과", "귤", "수박"]
    
    # 예제 1: 리스트의 각 요소를 순서대로 출력
    for 변수 in 과일:
        print(변수)
    
    # 사과
    # 귤
    # 수박
    
    # 예제 2: 리스트의 길이만큼 특정 코드를 반복
    for 변수 in 과일:
        print("#####")
    
    # #####
    # #####
    # #####
    

    1-2. 리스트 슬라이싱과 함께 사용하기

    리스트를 슬라이싱하여 원하는 부분만 선택하거나 순서를 바꿔 반복문을 실행할 수 있습니다.

    리스트 = ["가", "나", "다", "라"]
    
    # 예제 1: 인덱스 1부터 끝까지 순회
    for 글자 in 리스트[1:]:
        print(글자)
    
    # 나
    # 다
    # 라
    
    # 예제 2: 2칸씩 건너뛰며 순회
    for 글자 in 리스트[0::2]:
        print(글자)
    
    # 가
    # 다
    
    # 예제 3: 역순으로 순회
    for 글자 in 리스트[::-1]:
        print(글자)
    
    # 라
    # 다
    # 나
    # 가
    

    1-3. range() 함수로 숫자 순회하기

    range() 함수를 사용하면 특정 횟수만큼 또는 원하는 숫자 범위 내에서 코드를 반복 실행할 수 있습니다.

    # 예제 1: 0부터 99까지 100회 반복
    for i in range(100):
        print(i, end=" ") # print(0, 1, 2, ..., 99)
    
    print("\n", "="*20)
    
    # 예제 2: 시작, 끝, 간격을 지정하여 반복
    # 2002년부터 2050년까지 4년 간격으로 출력
    for year in range(2002, 2051, 4):
        print(year, end=" ") # print(2002, 2006, ..., 2050)
    
    print("\n", "="*20)
    
    # 예제 3: range를 응용한 역순 출력
    for i in range(100):
        print(99 - i, end=" ") # print(99, 98, ..., 0)
    
    # 0 1 2 ... 99 
    # ====================
    # 2002 2006 2010 2014 2018 2022 2026 2030 2034 2038 2042 2046 2050 
    # ====================
    # 99 98 97 ... 0
    

    2. 반복문의 활용: 데이터 처리와 조건 결합

    for문은 단순히 요소를 출력하는 것을 넘어, 각 요소를 가공하거나 특정 조건에 따라 다른 작업을 수행할 때 진가를 발휘합니다.

    2-1. 반복 중 데이터 가공하기

    반복문 내에서 각 요소에 연산을 적용하거나 내장 함수, 문자열 메서드 등을 활용할 수 있습니다.

    # 예제 1: 숫자 요소에 연산 적용하기
    숫자_리스트 = [100, 200, 300]
    for 숫자 in 숫자_리스트:
        print(숫자 + 10)
    
    # 110
    # 210
    # 310
    
    # 예제 2: 문자열 요소 가공하기
    문자열_리스트 = ["dog", "cat", "parrot"]
    for 단어 in 문자열_리스트:
        # 각 단어의 길이 출력
        print(f"길이: {len(단어)}")
        # 첫 글자를 대문자로 변환하여 출력
        print(f"변환: {단어[0].upper() + 단어[1:]}")
    
    # 길이: 3
    # 변환: Dog
    # 길이: 3
    # 변환: Cat
    # 길이: 6
    # 변환: Parrot
    
    # 예제 3: 반복문을 이용한 누적 합계 계산
    hab = 0
    for i in range(1, 11): # 1부터 10까지
        hab += i
    print("1부터 10까지의 합:", hab)
    
    # 1부터 10까지의 합: 55
    

     

    2-2. if문과 함께 사용하기

    반복문 안에 if문을 넣어 특정 조건을 만족하는 요소만 선택하여 처리할 수 있습니다.

    # 예제 1: 음수만 출력하기
    리스트1 = [3, -20, -3, 44]
    print("음수:")
    for 변수 in 리스트1:
        if 변수 < 0:
            print(변수)
    
    # 음수:
    # -20
    # -3
    
    # 예제 2: 여러 조건(20 미만의 3의 배수)을 만족하는 요소 출력
    리스트2 = [13, 21, 12, 14, 30, 18]
    print("20 미만의 3의 배수:")
    for 변수 in 리스트2:
        if (변수 < 20) and (변수 % 3 == 0):
            print(변수)
    
    # 20 미만의 3의 배수:
    # 12
    # 18
    
    # 예제 3: 특정 확장자를 가진 파일만 출력
    파일_리스트 = ["intra.h", "intra.c", "define.h", "run.py"]
    print(".h 파일:")
    for 파일 in 파일_리스트:
        if 파일.endswith(".h"): # .endswith() 메서드를 사용하면 더 간결합니다.
            print(파일)
    
    # .h 파일:
    # intra.h
    # define.h
    

    2-3. 인덱스(index)를 활용한 반복

    range(len()) 또는 enumerate를 사용하면 리스트의 인덱스 을 함께 활용하여 더 복잡한 로직을 구현할 수 있습니다.

    my_list = ["가", "나", "다", "라"]
    price_list = [100, 200, 400, 800]
    
    # 예제 1: 인덱스와 값을 함께 출력 (enumerate)
    for index, value in enumerate(my_list):
        print(f"인덱스 {index}: {value}")
    
    # 인덱스 0: 가
    # 인덱스 1: 나
    # 인덱스 2: 다
    # 인덱스 3: 라
    
    # 예제 2: 현재 요소와 이전/다음 요소를 함께 다루기
    # 인접한 두 요소 출력
    for i in range(1, len(my_list)):
        print(my_list[i-1], my_list[i])
    
    # 가 나
    # 나 다
    # 다 라
    
    # 인접한 요소 간의 차이 계산
    for i in range(len(price_list) - 1):
        print(abs(price_list[i+1] - price_list[i]))
    
    # 100
    # 200
    # 400
    

     

     


     

    3. 실전 응용: 중첩 반복문과 복잡한 데이터 구조

    for문 안에 또 다른 for문을 사용하는 중첩 반복문으로 2차원 리스트와 같은 복잡한 데이터를 효과적으로 처리할 수 있습니다.

    3-1. 2차원 리스트와 중첩 for문

    바깥 for문이 행(row)을, 안쪽 for문이 열(column)을 담당하여 2차원 데이터를 순회합니다.

    apart = [["101호", "102호"], ["201호", "202호"], ["301호", "302호"]]
    
    # 예제 1: 2차원 리스트의 모든 요소 출력
    for row in apart:
        for col in row:
            print(col)
        print("-" * 5) # 각 층(row) 출력이 끝나면 구분선 출력
    
    # 101호
    # 102호
    # -----
    # 201호
    # 202호
    # -----
    # 301호
    # 302호
    # -----
    
    # 예제 2: 역순으로 2차원 리스트 순회하기
    for row in apart[::-1]:
        for col in row[::-1]:
            print(col)
    
    # 302호
    # 301호
    # 202호
    # 201호
    # 102호
    # 101호
    

    3-2. 중첩 리스트 데이터 처리하기

    중첩 반복문을 사용하면 2차원 리스트의 모든 요소에 특정 연산을 적용하여 새로운 데이터를 만들 수 있습니다.

    data = [
        [2000, 3050, 2050, 1980],
        [7500, 2050, 2050, 1980],
        [15450, 15050, 15550, 14900],
    ]
    
    # 예제: 모든 요소에 수수료를 적용한 새로운 2차원 리스트 생성
    result = []
    for line in data:
        sub = [] 
        for column in line:
            sub.append(column * 1.00014)
        result.append(sub) 
    print(result)
    
    # [[2000.28, 3050.427, 2050.287, 1980.2772], [7501.05, 2050.287, 2050.287, 1980.2772], [15452.163, 15052.107, 15552.177, 14902.086]]
    

     

    설명: 안쪽 for문에서 계산된 결과를 sub 리스트에 모으고, 바깥쪽 for문에서 이 sub 리스트를 result 리스트에 추가하여 원래의 2차원 구조를 유지합니다.

    3-3. 다양한 예제로 문제 해결하기

    for문과 데이터 구조를 응용하여 주식 데이터 분석과 같은 실제 문제를 해결할 수 있습니다.

    # ohlc: 시가(open), 고가(high), 저가(low), 종가(close)
    ohlc = [
        ["open", "high", "low", "close"],
        [100, 110, 70, 100],
        [200, 210, 180, 190],
        [300, 310, 300, 310],
    ]
    
    # 헤더를 제외한 데이터 부분만 사용
    data_rows = ohlc[1:]
    
    # 예제 1: 종가만 출력하기
    print("--- 종가 리스트 ---")
    for row in data_rows:
        print(row[3])
    
    # --- 종가 리스트 ---
    # 100
    # 190
    # 310
    
    # 예제 2: 종가가 시가보다 높은 날의 종가만 출력
    print("--- 상승 마감 종가 ---")
    for row in data_rows:
        if row[3] >= row[0]: 
            print(row[3])
    
    # --- 상승 마감 종가 ---
    # 100
    # 310
    
    # 예제 3: 일별 변동폭(고가-저가)을 리스트로 만들기
    volatility = []
    for row in data_rows:
        volatility.append(row[1] - row[2]) 
    print(f"--- 일별 변동폭 ---\n{volatility}")
    
    # --- 일별 변동폭 ---
    # [40, 30, 10]
    
    # 예제 4: 총 손익(종가-시가) 계산하기
    profit = 0
    for row in data_rows:
        profit += (row[3] - row[0])
    print(f"--- 총 손익 ---\n{profit}")
    
    # --- 총 손익 ---
    # 0
    

     


     

    마치며: 반복문으로 더 강력한 프로그램 만들기

     

    for 반복문은 파이썬 프로그래밍의 가장 기본적이면서도 강력한 도구입니다.

    단순한 작업 자동화부터 복잡한 데이터 분석까지 거의 모든 영역에서 활용됩니다.

     

    오늘 배운 다양한 예제를 충분히 연습하여 for문을 자유자재로 다루는 능력을 기르신다면, 훨씬 더 효율적이고 똑똑한 프로그램을 만들 수 있을 것입니다.

     

    출처: 

     

    https://wikidocs.net/7006

     

    08. 파이썬 반복문

    조금 더 자세한 설명을 원한다면 클래스101의 "Level2 중급 파이썬"을 추천합니다. 고급 문법을 아는 것이 고급 실력을 의미하지 않습니다. "Level1 기초 파이썬"부터 …

    wikidocs.net

     

Designed by Tistory.