[PYTHON] FOR 반복문 기본 문법
어떤 언어를 공부하든지 반복문은 중요한 문법 중의 하나입니다. 파이썬은 특히나 FOR 반복문을 상당히 유연하게 사용할 수 있습니다.
FOR 루프의 기본 문법
FOR 문의 기본 문법은 아래와 같습니다.
for 변수 in 변수의 리스트(혹은 튜플, 혹은 문자열):
수행할 구문1
....
FOR 와 IN 으로 반복문을 돌릴 수 있습니다. 당연하겠지만 변수의 유형은 리스트(혹은 튜블, 혹은 문자열)에 담겨져 있는 요소의 타입을 따라 갑니다. 예를 들어 문자열이 담겨져 있는 리스트의 경우에는 변수가 문자열이 됩니다.
>>>> list_of_string = ['this', 'is', 'a', 'test', 'list']
>>>> for str in list_of_string:
.... print(str)
....
this
is
a
test
list
위 예에서 볼 수 있듯이 list_of_string이라는 문자열이 담긴 리스트를 반복하면 문자열이 출력됩니다. 만약 튜블로 이루어진 리스트의 경우에는 어떻게 반복될까요?
>>>> list_of_tuple = [('A', 1), ('B', 2), ('C', 3), ('D', 4), ('E', 5)]
>>>> for (text, number) in list_of_tuple:
.... print(text + str(number))
....
A1
B2
C3
D4
E5
>>>> for (text, number) in list_of_tuple:
.... print(text + number)
....
Traceback (most recent call last):
File "<input>", line 2, in <module> TypeError:
can only concatenate str (not "int") to str
>>>> for (text, number) in list_of_tuple:
.... print(text)
.... print(number)
....
A
1
B
2
C
3
D
4
E
5
위에서처럼 튜플이 담긴 리스트를 반복하면 그 요소인 튜플을 받아올 수 있습니다. 위 예제에서 사용한 str이란 함수는 파이썬에서 숫자를 문자와 같이 출력하고자 할 때 사용합니다. 만약 str로 씌워주지 않으면 TypeError가 발생합니다. 그렇다고 number를 str을 씌우지 않고 print할 수 없는 건 아닙니다. 문자열과 같이 쓰지만 않으면 int 형도 얼마든지 출력이 가능합니다.
튜플의 반복을 이용해 다양한 활용이 가능합니다. 예를 들어 숫자로만 이루어진 튜플의 경우 튜플의 인자값을 연산해서 가공할 수 있습니다.
>>>> a = [(800, 6), (1200, 3), (1450, 2), (2500, 1), (1180, 3), (1219, 5), (1740, 2), (1850, 1)]
>>>> for (price, cnt) in a:
.... print(price * cnt)
....
4800
3600
2900
2500
3540
6095
3480
1850
>>>> sum_of_list = 0
>>>> for (price, cnt) in a:
.... sum_of_list += price * cnt
....
>>>> print(sum_of_list)
28765
위의 a 리스트를 튜플이 가격과 수량으로 구성되어 있는 상품 판매 데이터라고 한다면, for 문을 활용하여 상품별로 판매한 매출을 계산할 수 있습니다. 물론 전체 합산(sum_of_list)을 구할 수도 있습니다.
지정 범위 루프
파이썬의 FOR 루프에서 지정된 범위에서 1씩 증가해서 루프를 돌리고 싶을 때는 RANGE 함수를 사용합니다.
>>>> for i in range(0, 10):
.... print(i)
....
0
1
2
3
4
5
6
7
8
9
10
RANGE 함수는 첫번째 인자값이 시작할 값이고, 두번째 인자값이 종료할 인자값입니다. 종료할 인자값은 항상 포함된 범위가 출력됩니다. 시작값과 종료값이 정수형으로 지정된 위의 RANGE 함수는 반복문에서 1씩 증가한 정수값가지고 있는 객체입니다. 해당 객체는 i 변수에 리스트의 숫자를 하나씩 대입합니다. 결국 위의 RANGE 함수는 정수형 리스트로 [0, 1, 2, 3, ..., 10 ] 으로 이루어진 객체와 비슷한 기능을 합니다.
루프의 종료
루프를 종료할 때 사용하는 문법은 continue와 break 두 가지가 있습니다. continue는 매치하는 조건이 있더라도 그 뒤의 실행을 하지 않고 다음 루프를 시작하면서 지정된 전체 범위를 반복합니다. 반면, break 구문은 매치하는 조건이 나오면 바로 루프를 종료합니다.
>>>> for i in range(0, 10):
.... if 3 < i < 5:
.... continue
.... print(i)
....
0
1
2
3
5
6
7
8
9
continue 구문을 사용하면 i 가 3보다 크고 5보다 작을때, 즉 4에 해당하면 아래 print 구문을 실행하지 않고 다음 구문으로 넘어가서 4가 출력되지 않습니다.
>>>> for i in range(0, 10):
.... if 3 < i < 5:
.... break
.... print(i)
....
0
1
2
3
반면, break 구문을 사용하면 i가 4가 되어 조건에 들어가자마자 루프가 종료되어 0부터 3까지만 출력됩니다.
FOR 루프의 기본적인 문법에서 나아가 파이썬에서 활용되는 다양한 반복문들이 있습니다. 예를 들어, 리스트 내에 루프를 돌리는 List Comprehension 등과 같은 기능이 있지만, 이 글에서는 기본적인 반복문 만을 주제로 하기 때문에 다루지는 않았지만 기회가 있다면 다른 포스팅에서 다루어 보도록 하겠습니다. 파이썬의 기본 반복문을 활용하면 아이디어에 따라서 다양하게 이용할 수 있기 때문에 기본적인 문법을 잘 기억해두시면 좋습니다.