티스토리 뷰

목차

    반응형

    Python for문을 활용한 루프 처리 방법을 설명합니다.

    • 기본문법
    • 편리한 기능
    • 다른 주제

    파이썬 for문(반복 루프) 사용법 12가지

    목차

       

      기본적인 문법

      Python for문 기본 사용법

      C언어 계열 프로그래밍 언어의 for문 (for 루프)은 카운터 변수(인덱스)와 조건을 사용하여 작성합니다.

       

      1
      2
      for (int i = 0; i < 10; i++
          처리
      cs

       

      Python for문은 C언어 계열과 달리 카운터 변수(인덱스)를 사용하지 않습니다.

       

      1
      2
      for 변수 이름 in 이터레이터 오브젝트 : 
          처리
      cs

       

      다른 언어의 foreach 문에 해당합니다. 리스트(배열) 등 개체 요소가 차례로 변수에 할당되어 처리됩니다.

       

      구체적인 예는 다음과 같습니다.

       

      1
      2
      3
      4
      5
      6
      7
      = ['Alice''Bob''Charlie']
       
      for name in l:
          print(name)
      # Alice
      # Bob
      # Charlie
      cs

       

      조건에 따라 중간 종료 : break

      for 문 중간에 프로세스를 종료하려면 break를 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      = ['Alice''Bob''Charlie']
       
      for name in l:
          if name == 'Bob':
              print('!!BREAK!!')
              break
          print(name)
      # Alice
      # !!BREAK!!
      cs

       

      특정 요소 처리를 생략 : continue

      특정 요소에 대한 처리를 생략하려면 continue를 사용합니다.

      break는 for 루프 전체가 종료되지만, continue는 해당 요소에 대해서만 처리가 생략되므로 for 루프는 끝까지 실행됩니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      = ['Alice''Bob''Charlie']
       
      for name in l:
          if name == 'Bob':
              print('!!SKIP!!')
              continue
          print(name)
      # Alice
      # !!SKIP!!
      # Charlie
      cs

       

      for 루프 완료 후 처리 : else

      for문 루프가 종료된 후 어떤 작업을 수행하려면 else를 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      = ['Alice''Bob''Charlie']
       
      for name in l:
          print(name)
      else:
          print('!!FINISH!!')
      # Alice
      # Bob
      # Charlie
      # !!FINISH!!
      cs

       

      break에 의해 중간에 종료된다면 else는 실행되지 않습니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      for name in l:
          if name == 'Bob':
              print('!!BREAK!!')
              break
          print(name)
      else:
          print('!!FINISH!!')
      # Alice
      # !!BREAK!!
      cs

       

      continue의 경우 for 루프가 끝까지 실행되므로 else가 실행됩니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      for name in l:
          if name == 'Bob':
              print('!!SKIP!!')
              continue
          print(name)
      else:
          print('!!FINISH!!')
      # Alice
      # !!SKIP!!
      # Charlie
      # !!FINISH!!
      cs

       

       

      for문에서 사용하면 편리한 기능

      인덱스 (카운터) : range () 함수

      Python for 문에서 인덱스(카운터)를 얻고 싶을 때 range()함수를 사용합니다.

       

      1
      2
      3
      4
      5
      for i in range(3):
          print(i)
      # 0
      # 1
      # 2
      cs

       

      range() 함수가 range 클래스의 생성자입니다.

       

      1
      2
      3
      4
      print(range(3))
      print(type(range(3)))
      # range(0, 3)
      # <class 'range'>
      cs

       

      설명을 위해 list() 요소를 출력하여 표시해 보겠습니다.

       

      range(stop)에서 0 <= i < stop 인덱스 번호를 반환합니다.

       

      1
      2
      3
      4
      5
      print(list(range(3)))
      # [0, 1, 2]
       
      print(list(range(6)))
      # [0, 1, 2, 3, 4, 5]
      cs

       

      0부터 시작이 아니라 범위를 지정하고 싶다면, range(start, stop)와 같이 2개의 인수를 지정합니다.

       

      start <= i < stop을 통해 인덱스를 반환합니다.

       

      1
      2
      print(list(range(1013)))
      # [10, 11, 12]
      cs

       

      또한, 1이 아니라 다른 숫자만큼 증가하고 싶다면 range(start, stop, step)와 같이 3개의 인수를 지정합니다.

       

      start <= i < stop 범위에서 스텝(3)에 맞는 정수를 출력합니다.

       

      1
      2
      print(list(range(0103)))
      # [0, 3, 6, 9]
      cs

       

      step에는 음수 값을 지정할 수도 있습니다.

       

      1
      2
      print(list(range(100-3)))
      # [10, 7, 4, 1]
      cs

       

      for 문에서 실행하면 다음과 같습니다.

       

      1
      2
      3
      4
      5
      6
      for i in range(100-3):
          print(i)
      # 10
      # 7
      # 4
      # 1
      cs

       

      LIST For문 함께 사용하기

       

       

       

       

      LIST 요소와 인덱스 : enumerate () 함수

      리스트(배열) 등의 요소를 인덱스(카운터)와 함께 얻으려면 enumerate()함수를 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      = ['Alice''Bob''Charlie']
       
      for name in l:
          print(name)
      # Alice
      # Bob
      # Charlie
       
      for i, name in enumerate(l):
          print(i, name)
      # 0 Alice
      # 1 Bob
      # 2 Charlie
      cs

       

      enumerate() 함수의 두 번째 인수는 시작 값입니다. 0 부터가 아니라 시작이 임의의 정수 값부터 시작합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      for i, name in enumerate(l, 1):
          print(i, name)
      # 1 Alice
      # 2 Bob
      # 3 Charlie
       
      for i, name in enumerate(l, 42):
          print(i, name)
      # 42 Alice
      # 43 Bob
      # 44 Charlie
      cs

       

      enumerate() 함수에 step을 지정하는 인수는 없지만, 다음과 같이하면 코딩하면 똑같이 흉내낼 수 있습니다.

       

      1
      2
      3
      4
      5
      6
      step = 3
      for i, name in enumerate(l):
          print(i * step, name)
      # 0 Alice
      # 3 Bob
      # 6 Charlie
      cs

       

      LIST의 요소 (복수 변수) : zip () 함수

      LIST 개체(목록)의 요소를 여러 변수로 정리하고 싶다면 zip()함수를 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      names = ['Alice''Bob''Charlie']
      ages = [245018]
       
      for name, age in zip(names, ages):
          print(name, age)
      # Alice 24
      # Bob 50
      # Charlie 18
      cs

       

      변수 2개에 한정하지 않고, 3개 이상의 개체로 정리할 수도 있습니다.

       

      1
      2
      3
      4
      5
      6
      7
      points = [1008590]
       
      for name, age, point in zip(names, ages, points):
          print(name, age, point)
      # Alice 24 100
      # Bob 50 85
      # Charlie 18 90
      cs

       

      예제처럼 zip() 함수를 통해 여러 요소를 순차적으로 얻을 수 있습니다.

       

      LIST 요소와 인덱스 : enumerate(), zip() 함수

      LIST의 여러 개체(목록)에서 요소와 인덱스(카운터)를 동시에 얻으려면 enumerate(), zip() 함수를 함께 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      names = ['Alice''Bob''Charlie']
      ages = [245018]
       
      for i, (name, age) in enumerate(zip(names, ages)):
          print(i, name, age)
      # 0 Alice 24
      # 1 Bob 50
      # 2 Charlie 18
      cs

       

      역순 : reversed () 함수

      요소를 역순으로 얻으려면 reversed() 함수를 사용합니다.

       

      1
      2
      3
      4
      5
      6
      7
      = ['Alice''Bob''Charlie']
       
      for name in reversed(l):
          print(name)
      # Charlie
      # Bob
      # Alice
      cs

       

      range 개체도 역순으로 얻을 수 있습니다. reversed() 함수를 사용하지 않고 step에 음수 값을 지정합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      for i in reversed(range(3)):
          print(i)
      # 2
      # 1
      # 0
       
      for i in range(2-1-1):
          print(i)
      # 2
      # 1
      # 0
      cs

       

      enumerate 객체는 반전이 안 됩니다. 그래서 list()로 변경합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      # for i, name in reversed(enumerate(l)):
      #     print(i, name)
      # TypeError: 'enumerate' object is not reversible
       
      for i, name in reversed(list(enumerate(l))):
          print(i, name)
      # 2 Charlie
      # 1 Bob
      # 0 Alice
      cs

       

      인덱스(카운터)를 뒤집지 않으려면 enumerate() 가운데 reversed()를 추가하여 사용합니다.

       

      1
      2
      3
      4
      5
      for i, name in enumerate(reversed(l)):
          print(i, name)
      # 0 Charlie
      # 1 Bob
      # 2 Alice
      cs

       

      zip 개체도 반전이 안 됩니다. 그래서 list로 변경하여 출력해 봅니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      l2 = [245018]
       
      # for name, age in reversed(zip(l, l2)):
      #     print(name, age)
      # TypeError: 'zip' object is not reversible
       
      for name, age in reversed(list(zip(l, l2))):
          print(name, age)
      # Charlie 18
      # Bob 50
      # Alice 24
      cs

       

      다중 루프 : itertools.product()함수

      Python에서 다중 루프는 다음과 같이 사용할 수 있습니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      l1 = [123]
      l2 = [102030]
       
      for i in l1:
          for j in l2:
              print(i, j)
      # 1 10
      # 1 20
      # 1 30
      # 2 10
      # 2 20
      # 2 30
      # 3 10
      # 3 20
      # 3 30
      cs

       

      표준 라이브러리 itertools 모듈의 itertools.product() 함수를 사용합니다. for문을 중첩하여 사용하지 않고 다중 루프와 비슷한 결과를 얻을 수 있습니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      import itertools
       
      l1 = [123]
      l2 = [102030]
       
      for i, j in itertools.product(l1, l2):
          print(i, j)
      # 1 10
      # 1 20
      # 1 30
      # 2 10
      # 2 20
      # 2 30
      # 3 10
      # 3 20
      # 3 30
      cs
       

      다른 주제

      DICTIONARY for 루프

      딕셔너리 dict의 개체를 for 루프로 돌려 키를 얻을 수 있습니다.

       

      1
      2
      3
      4
      5
      6
      7
      = {'key1'1'key2'2'key3'3}
       
      for k in d:
          print(k)
      # key1
      # key2
      # key3
      cs

       

      값, 키, 둘 다 등을 원한다면 values() 메소드, items() 메소드를 사용합니다.

       

      1
      2
      3
      4
      5
      for v in d.values():
          print(v)
      # 1
      # 2
      # 3
      cs

       

      1
      2
      3
      4
      5
      for k, v in d.items():
          print(k, v)
      # key1 1
      # key2 2
      # key3 3
      cs

       

      List 내포

      LIST(배열) 등의 요소를 통해 새로운 리스트를 생성한다면, for문보다 내포를 사용하세요.

       

      LIST 내포 표기는 다음과 같습니다.

       

      1
      [식 for 변수 이름 in 개체 ]
      cs

       

      for 반복문을 통해 예제를 소개합니다.

       

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      squares = [i**2 for i in range(5)]
      print(squares)
      # [0, 1, 4, 9, 16]
       
      squares = []
      for i in range(5):
          squares.append(i**2)
       
      print(squares)
      # [0, 1, 4, 9, 16]
      cs

       

      LIST 내포를 사용하면 내부 요소를 처리할 수 있습니다. 또한, 조건에 따라 요소를 추출해 새로운 LIST를 생성할 수 있습니다.

       

      파이썬 추가 정보

       

      반응형