조건문을 이용해 코드를 간단히 제어해 봤고, 반복문
을 사용하여 코드를 제어할 수도 있습니다. 동일한 코드를 일정 수만큼 반복해서 수행해야 할 경우 반복문을 사용하며, 리스트의 모든 요소를 출력하는 등의 일이 여기에 속합니다. Python은 반복문을 위해 for
를 지원합니다.
for문 작성하기
for
는 Python에서 반복문을 작성하기 위한 키워드로, 기본적으로 for-each(iterable 자료형 참조)
형태를 띱니다. 따라서 for-in
으로 알고 있는 것이 좋습니다.
for elem in [1, 2, 3, 4, 5]: | |
print(elem) | |
# 1 | |
# 2 | |
# 3 | |
# 4 | |
# 5 |
for (first, last) in [(1, 2), (3, 4), (5, 6)]: | |
print(first, last) | |
# 1 2 | |
# 3 4 | |
# 5 6 |
위는 List의 값을 순차적으로 접근하는 형태의 전형적인 for문이며, 아래는 unpacking을 활용한 for문의 응용을 나타냅니다. 사실 타 프로그래밍 언어의 반복문을 경험해 보았다면, n부터 m까지 반복
형태의 반복문이 더 익숙할 것입니다. Python의 반복문은 for-each 방식이기 때문에, range
라는 함수를 사용해야 합니다.
for i in range(10): | |
print(i) | |
# 1 | |
# 2 | |
# 3 | |
# ... | |
# 9 | |
for i in range(1, 5): | |
print(i) | |
# 1 | |
# 2 | |
# 3 | |
# 4 |
위처럼, range(n)
은 0부터 n-1까지의 숫자를 가지고 있고, range(n, m)
은 n부터 m-1까지의 숫자를 가지고 있습니다. 사실 Python 3에서의 range() 함수는 range 객체를 반환하는 것이지만, 여기서는 그냥 iterable 자료형, List 등 편한 대로 이해하고 넘어갑시다.
break, continue statement
break
와 continue
를 이용해서 반복문을 제어할 수 있습니다. break는 반복문을 종료하고, continue는 현재 루프를 건너뛰고 다음 루프로 제어를 넘깁니다.
for i in range(10): | |
if i ** 2 > 20: | |
# i의 제곱이 20 초과라면 | |
print(i) | |
break | |
# i(여기선 5) 출력 후 반복문 종료 |
for letter in 'Python': # First Example | |
if letter == 'h': | |
# letter가 'h'라면 | |
continue | |
# 다음 루프로 제어가 넘어감 | |
print(letter) | |
# 'P' | |
# 'y' | |
# 't' | |
# 'o' | |
# 'n' | |
for - else
Python은 for문에서도 else
를 사용할 수 있습니다. for문에서 break가 발생하지 않고 모든 루프가 성공적으로 돌면 else
블럭 내부의 코드가 실행되는 형태입니다.
for letter in 'PlanB': | |
if letter = 'c': | |
break | |
else: | |
print("c not in 'PlanB'") | |
# "c not in 'PlanB'" | |
특정 작업을 수행하는 for문에서 break가 발생하지 않았다는 것은 암시적으로 '모든 작업에 성공했다'는 것을 의미합니다. 따라서 이와 같은 판단을 위해 for-else문은 꽤 필요성이 많은 문법이라고 볼 수 있습니다.
List Comprehension
1부터 100까지의 수 중 짝수만으로 이루어진 리스트를 만들어야 한다면, 아래처럼 코드를 작성할 수 있을 것입니다.
l = [] | |
# 빈 리스트 | |
for i in range(1, 101): | |
if not i % 2: | |
l.append(i) | |
print(l) | |
# [2, 4, 6, 8, ..., 100] |
충분히 괜찮은 코드지만, 해당 로직은 결국 1부터 100까지 반복하며 - 조건을 판단하고 - 리스트에 값을 누적하는 형태입니다. Python에서는 nested(포함된) for문을 이용해 iterable 객체를 만드는 comprehension
이라는 개념을 지원하고, 아래와 같이 사용합니다.
l = [i for i in range(10)] | |
print(l) | |
# [0, 1, 2, ..., 9] | |
l = [i for i in range(1, 101) if not i % 2] | |
print(l) | |
# [2, 4, 6, 8, ..., 100] |
'Python 계열 > Python 레거시 글' 카테고리의 다른 글
[Python] pass statement (0) | 2018.06.24 |
---|---|
[Python] 반복문 - while (0) | 2018.06.23 |
[Python] 조건문 - if (0) | 2018.06.21 |
[Python] Iterable 자료형 - Dictionary, Set (0) | 2018.06.20 |
[Python] Iterable 자료형 - List, Tuple (1) | 2018.06.19 |