파이썬의 for 반복문은 C/C++의 그것과는 약간 다르다. (JAVA나 C#의 foreach 명령과 유사한 점이 많다.) 기본 적인 문법은 다음과 같다.
여기서 반복형은 열거형(sequence, range형, 문자열, 리스트, 튜플 등), 딕셔너리 등이 있다.
예로 기존의 리스트를 이용하여 리스트 요소들 중 짝수의 개수를 세는 프로그램을 작성해 보자.
>>> lst = [11, 44, 21, 55, 101]
>>> cnt = 0
>>> for n in lst :
… if n%2==0:
… cnt += 1
>>> cnt
1
|
이 예제는 리스트 lst 의 각 요소가 순서대로 n 변수에 대입되고 반복문이 수행된다.
range()함수와 range 형
for 구문과 자주 같이 사용되는 파이썬 내장 함수 중에서 range() 함수가 있는데 이 함수는 range 형을 만들어 준다. (range 형은 시퀀스 형에 속한다.) for 반복문과 조합되어서 자주 사용되므로 여기에서 자세히 설명하도록 하겠다. range() 함수는 세 가지 용법이 있다. 다음에서 m, n, s는 정수이다.
range(n) # 0 부터 n-1 까지의 요소를 가지는 range 형 반환
range(m,n) # m 부터 n-1 까지의 요소를 가지는 range 형 반환
range(m,n,s) # m 부터 n-1 까지의 요소(s는 step)를 가지는 range 형 반환
|
한 가지 주의할 점은 파이썬 3.x에서는 range()함수는 range 형을 반환한다. (반면 파이썬 2.x 에서는 리스트를 반환한다.) 따라서 파이썬 3.x에서는 이 rangeg형을 리스트로 만들기 위해서는 list()함수를 반드시 명시적으로 사용해야 한다.
>>> range(5)
range(0,5)
>>> list(range(5))
[0,1,2,3,4]
>>> list(range(1,11))
[1,2,3,4,5,6,7,8,9,10]
>>> list(range(0,30,5)) # 5가 증분
[0,5,10,15,20,25]
>>> list(range(0,-5,-1)) # -1이 증분
[0,-1,-2,-3,-4]
>>> list(range(0))
[]
>>> list(range(1,0))
[]
|
하지만 for문 안에서 range 함수를 사용할 경우 궂이 리스트로 바꿀 필요는 없다. 왜냐면 for 문에는 반복형(iterable)이 사용되며 range 객체는 열거형(sequence)이므로 반복형이기 때문이다.
예를 들어서 ‘hi.’라는 문자열을 다섯 번 출력하는 프로그램을 작성해 보자.
for _ in range(5):
print(‘hi.’)
|
이 반복문은 변수 _ 가 0,1,2,3,4 값을 가지고 각각 반복을 수행하게 된다. 실제 이 변수가 사용되지는 않으므로 그냥 _ 로 지정하였다. (파이썬에서 dummy variable 의 이름은 보통 _ 로 지정한다.)
구구단의 2단을 출력하는 프로그램을 작성해 보자.
>>> for n in range(2,10): ... print('2 x %d = %d'%(n, 2*n)) 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18
|
여기서 변수 n은 2부터 9까지의 값을 가지고 반복문이 수행된다. range(2,10)은 2부터 9까지의 숫자를 차례로 생성한다.
for 반복문은 중첩해서도 얼마든지 사용할 수 있다. 구구단의 2단부터 9단까지 한꺼번에 출력하려면 다음과 같이 작성하면 될 것이다.
>>> for m in range(2,10): ... for n in range(2,10): ... print('%d x %d = %d'%(m,n,m*n)) ... print('-'*10)
|
여기에서 print(‘-’*10)은 ‘----------’ 을 출력한다.