Python에서 가장 많이 사용하는 반복문 for의 기본 구조와 range(), 리스트 순회, break, continue, 중첩 반복문까지 쉽게 이해하기
설명
Python의 for 반복문은 정해진 데이터를 하나씩 처리하거나 일정한 범위를 반복할 때 사용하는 가장 기본적인 문법입니다. 리스트, 문자열, 튜플, 딕셔너리와 같은 데이터를 순회할 수 있으며 range()와 함께 사용하면 원하는 횟수만큼 코드를 반복할 수도 있습니다. 이 글에서는 Python for문의 기본 문법부터 실전 활용법과 자주 발생하는 실수까지 초보자도 이해하기 쉽게 정리합니다.
Python for 반복문이란?
Python을 공부하다 보면 같은 작업을 여러 번 반복해야 하는 상황을 자주 만나게 됩니다.
예를 들어 학생 5명의 이름을 하나씩 출력하거나, 리스트에 들어 있는 상품을 모두 확인하거나, 1부터 100까지 숫자를 계산하는 경우가 그렇습니다.
이런 작업을 코드로 하나씩 작성한다면 매우 비효율적입니다.
예를 들어 다음처럼 작성할 수도 있습니다.
print("사과")
print("바나나")
print("오렌지")
하지만 데이터가 100개, 1,000개로 늘어난다면 이런 방식으로 코드를 작성할 수 없습니다.
이때 사용하는 것이 반복문입니다.
Python에서 대표적인 반복문은 for와 while입니다.
그중 for문은 데이터를 하나씩 꺼내면서 반복 작업을 수행하는 데 특히 적합합니다.
Python for문 기본 문법
가장 기본적인 형태는 다음과 같습니다.
for 변수 in 반복할_데이터:
반복해서 실행할 코드
예를 들어 과일 목록을 출력해 보겠습니다.
fruits = ["사과", "바나나", "오렌지"]
for fruit in fruits:
print(fruit)
실행 결과:
사과
바나나
오렌지
여기서 fruit는 리스트에서 현재 꺼낸 값을 저장하는 변수입니다.
첫 번째 반복에서는 사과, 두 번째에서는 바나나, 세 번째에서는 오렌지가 들어갑니다.
즉, for문은 다음과 같은 방식으로 동작합니다.
리스트에서 하나 가져오기 → 코드 실행 → 다음 값 가져오기 → 코드 실행 → 데이터가 끝날 때까지 반복
for문은 어떻게 동작할까?
다음 코드를 살펴보겠습니다.
numbers = [10, 20, 30]
for number in numbers:
print(number)
실행 과정을 단순하게 표현하면 다음과 같습니다.
| 반복 순서 | number에 들어가는 값 | 실행 결과 |
|---|---|---|
| 1번째 | 10 | 10 출력 |
| 2번째 | 20 | 20 출력 |
| 3번째 | 30 | 30 출력 |
| 데이터 없음 | – | 반복 종료 |
for문에서는 리스트의 데이터가 모두 처리되면 자동으로 반복이 종료됩니다.
이 점이 while문과 다른 중요한 특징입니다.
for문과 while문의 차이
두 반복문 모두 반복 작업을 수행하지만 사용하는 상황이 조금 다릅니다.
| 구분 | for문 | while문 |
| 주요 용도 | 데이터를 순회하거나 정해진 범위 반복 | 조건이 만족되는 동안 반복 |
| 반복 횟수 | 데이터나 범위에 의해 결정되는 경우가 많음 | 조건에 따라 결정 |
| 리스트 순회 | 매우 편리함 | 상대적으로 번거로움 |
| 반복 종료 | 데이터가 끝나면 자동 종료 | 조건이 거짓이 되어야 종료 |
| 무한 반복 가능 | 일반적으로 드묾 | while True 등으로 쉽게 구현 |
예를 들어 리스트의 모든 데이터를 처리한다면 for문이 자연스럽습니다.
users = ["Kim", "Lee", "Park"]
for user in users:
print(user)
반면 사용자가 특정 값을 입력할 때까지 반복해야 한다면 while문이 더 적합할 수 있습니다.
따라서 두 문법 중 하나가 무조건 더 좋은 것이 아니라 문제의 형태에 맞춰 선택하는 것이 중요합니다.
Python for문과 range() 사용하기
for문을 공부할 때 반드시 함께 알아두면 좋은 것이 range()입니다.
range()는 숫자의 범위를 만들어주는 함수입니다.
예를 들어 다음과 같이 사용할 수 있습니다.
for number in range(5):
print(number)
결과는 다음과 같습니다.
0
1
2
3
4
여기서 중요한 점은 range(5)가 0부터 5 바로 전까지의 숫자를 만든다는 것입니다.
즉, 5는 포함되지 않습니다.
range()로 1부터 5까지 반복하기
1부터 5까지 출력하고 싶다면 다음처럼 작성합니다.
for number in range(1, 6):
print(number)
결과:
1
2
3
4
5
range(start, stop) 형태에서는 start는 포함되지만 stop은 포함되지 않습니다.
이것을 처음 배울 때 가장 많이 헷갈립니다.
range(1, 6) → 1, 2, 3, 4, 5
라고 기억하면 편합니다.
range()의 세 번째 인자 사용하기
range()는 시작 값과 끝 값뿐만 아니라 증가 폭도 지정할 수 있습니다.
형태는 다음과 같습니다.
range(start, stop, step)
예를 들어 2씩 증가시키고 싶다면 다음과 같이 작성할 수 있습니다.
for number in range(0, 11, 2):
print(number)
결과:
0
2
4
6
8
10
여기서 세 번째 값인 2가 증가 폭입니다.
반대로 숫자를 감소시키는 것도 가능합니다.
for number in range(10, 0, -1):
print(number)
결과:
10
9
8
7
6
5
4
3
2
1
for문으로 리스트 순회하기
Python에서 for문을 가장 많이 사용하는 상황 중 하나가 리스트 순회입니다.
예를 들어 사용자 이름이 리스트에 저장되어 있다고 가정해보겠습니다.
users = ["철수", "영희", "민수"]
for user in users:
print(user)
이렇게 작성하면 리스트에 있는 모든 사용자 이름을 하나씩 처리할 수 있습니다.
실제 프로그램에서는 단순히 출력하는 것뿐만 아니라 데이터베이스에서 가져온 목록을 처리하거나, 상품 목록을 확인하거나, API 응답 데이터를 가공하는 데도 같은 방식이 사용됩니다.
for문으로 문자열 처리하기
for문은 리스트뿐만 아니라 문자열에도 사용할 수 있습니다.
문자열은 여러 개의 문자가 순서대로 구성된 데이터이기 때문입니다.
예를 들어 다음과 같이 작성할 수 있습니다.
word = "Python"
for character in word:
print(character)
결과:
P
y
t
h
o
n
문자열의 각 문자를 하나씩 가져와 처리하는 것입니다.
이 기능은 문자열 검사, 특정 문자 찾기, 텍스트 처리 등에 활용할 수 있습니다.
for문으로 딕셔너리 순회하기
Python의 딕셔너리도 for문으로 순회할 수 있습니다.
예를 들어 다음과 같은 딕셔너리가 있다고 해보겠습니다.
user = {
"name": "철수",
"age": 25,
"city": "서울"
}
딕셔너리를 그대로 반복하면 기본적으로 키(key)를 가져옵니다.
for key in user:
print(key)
결과:
name
age
city
값을 가져오고 싶다면 values()를 사용할 수 있습니다.
for value in user.values():
print(value)
키와 값을 동시에 가져오려면 items()가 유용합니다.
for key, value in user.items():
print(key, value)
이 방식은 Python에서 딕셔너리 데이터를 처리할 때 매우 자주 사용됩니다.
for문에서 enumerate() 사용하기
리스트의 값뿐만 아니라 현재 몇 번째 데이터인지 함께 알고 싶은 경우가 있습니다.
이때 유용한 것이 enumerate()입니다.
예를 들어 다음과 같이 사용할 수 있습니다.
fruits = ["사과", "바나나", "오렌지"]
for index, fruit in enumerate(fruits):
print(index, fruit)
결과:
0 사과
1 바나나
2 오렌지
인덱스를 1부터 시작하고 싶다면 다음과 같이 작성할 수 있습니다.
for index, fruit in enumerate(fruits, start=1):
print(index, fruit)
결과:
1 사과
2 바나나
3 오렌지
리스트의 순번과 데이터를 함께 처리해야 할 때 매우 편리합니다.
for문에서 break 사용하기
break는 반복문을 즉시 종료합니다.
예를 들어 1부터 10까지 반복하지만 5를 만나면 종료하도록 만들 수 있습니다.
for number in range(1, 11):
if number == 5:
break
print(number)
결과:
1
2
3
4
5가 되는 순간 break가 실행되기 때문에 반복문 전체가 종료됩니다.
break는 특정 데이터를 찾았을 때 더 이상 나머지 데이터를 확인할 필요가 없는 경우 등에 유용합니다.
for문에서 continue 사용하기
continue는 현재 반복에서 남은 코드를 건너뛰고 다음 반복으로 넘어갑니다.
예를 들어 홀수만 출력하고 싶다면 다음과 같이 작성할 수 있습니다.
for number in range(1, 11):
if number % 2 == 0:
continue
print(number)
결과:
1
3
5
7
9
짝수를 만났을 때 continue가 실행되어 print()를 건너뛰는 방식입니다.
쉽게 기억하면 다음과 같습니다.
break → 반복문 종료
continue → 이번 반복 건너뛰기
for문과 조건문 함께 사용하기
실제 프로그램에서는 for문만 단독으로 사용하는 경우보다 if문과 함께 사용하는 경우가 많습니다.
예를 들어 숫자 리스트에서 10보다 큰 숫자만 출력할 수 있습니다.
numbers = [3, 15, 7, 20, 9, 30]
for number in numbers:
if number > 10:
print(number)
결과:
15
20
30
이처럼 반복하면서 조건을 검사하는 구조는 데이터 처리 프로그램에서 매우 자주 등장합니다.
for문 중첩 반복문
for문 안에 또 다른 for문을 넣는 것도 가능합니다.
이를 중첩 반복문이라고 합니다.
가장 대표적인 예제가 구구단입니다.
for dan in range(2, 10):
for number in range(1, 10):
print(dan, "*", number, "=", dan * number)
바깥쪽 반복문은 2단부터 9단까지 처리하고, 안쪽 반복문은 각 단에서 1부터 9까지 반복합니다.
중첩 반복문은 2차원 리스트나 표 형태의 데이터를 처리할 때도 사용할 수 있습니다.
다만 반복문이 여러 단계로 중첩되면 코드가 복잡해지고 처리해야 하는 작업량도 증가할 수 있으므로 필요한 경우에 사용하는 것이 좋습니다.
for문에서 자주 발생하는 실수
1. range()의 마지막 숫자가 포함된다고 생각하는 경우
가장 흔한 실수입니다.
range(1, 5)의 결과는 다음과 같습니다.
1, 2, 3, 4
5는 포함되지 않습니다.
즉, range()의 stop 값은 반복 범위에 포함되지 않습니다.
2. 들여쓰기를 잘못하는 경우
Python에서는 들여쓰기가 매우 중요합니다.
다음처럼 반복할 코드는 for문 아래에 들여쓰기해야 합니다.
for number in range(5):
print(number)
들여쓰기가 잘못되면 문법 오류가 발생하거나 원하는 결과와 다른 방식으로 코드가 실행될 수 있습니다.
3. 반복 중인 리스트를 직접 수정하는 경우
다음과 같이 리스트를 순회하면서 같은 리스트에서 항목을 삭제하는 코드는 예상하지 못한 결과를 만들 수 있습니다.
numbers = [1, 2, 3, 4, 5]
for number in numbers:
if number % 2 == 0:
numbers.remove(number)
리스트의 크기나 인덱스가 반복 중에 변경되기 때문에 일부 데이터가 제대로 처리되지 않을 수 있습니다.
데이터를 필터링해야 한다면 별도의 리스트를 만들거나 리스트 컴프리헨션 같은 방법을 사용하는 것이 더 안전한 경우가 많습니다.
리스트 컴프리헨션과 for문
Python에는 반복문을 이용해 새로운 리스트를 간결하게 만드는 리스트 컴프리헨션이라는 문법도 있습니다.
예를 들어 1부터 5까지의 제곱을 새로운 리스트로 만들 수 있습니다.
일반적인 for문으로 작성하면 다음과 같습니다.
numbers = []
for number in range(1, 6):
numbers.append(number ** 2)
같은 작업을 리스트 컴프리헨션으로 작성하면 다음과 같습니다.
numbers = [number ** 2 for number in range(1, 6)]
결과는 다음과 같습니다.
[1, 4, 9, 16, 25]
리스트 컴프리헨션은 Python에서 자주 사용되지만, 처음부터 짧은 코드만 익히기보다는 먼저 일반적인 for문의 동작 원리를 이해하는 것이 좋습니다.
실전 예제: 사용자 목록 출력하기
간단한 사용자 목록을 처리해 보겠습니다.
users = [
{"name": "철수", "age": 20},
{"name": "영희", "age": 25},
{"name": "민수", "age": 30}
]
여기서 25세 이상인 사용자만 출력할 수 있습니다.
for user in users:
if user["age"] >= 25:
print(user["name"])
결과:
영희
민수
이런 형태는 실제 Python 프로그램에서도 매우 흔합니다.
API에서 JSON 데이터를 받아 처리하거나 데이터베이스에서 조회한 여러 레코드를 가공할 때도 비슷한 구조가 사용됩니다.
for문을 사용할 때 기억하면 좋은 기준
for문을 작성하기 전에 다음 세 가지를 생각하면 코드를 훨씬 쉽게 만들 수 있습니다.
1. 무엇을 반복할 것인가?
리스트인지, 문자열인지, range()인지 먼저 결정합니다.
2. 반복하면서 무엇을 할 것인가?
출력할 것인지, 조건을 검사할 것인지, 새로운 데이터를 만들 것인지 정합니다.
3. 특정 상황에서 반복을 건너뛰거나 종료해야 하는가?
필요하다면 continue 또는 break를 사용합니다.
예를 들어 다음과 같은 형태입니다.
for item in items:
if 조건:
continue
if 종료조건:
break
처리할 코드
이 구조에 익숙해지면 다양한 반복 문제를 훨씬 쉽게 풀 수 있습니다.
Python for 반복문 핵심 정리
Python의 for문은 데이터를 하나씩 순회하면서 반복 작업을 수행하는 문법입니다.
특히 다음과 같은 상황에서 많이 사용합니다.
- 리스트의 모든 데이터 처리
- 문자열의 각 문자 처리
range()를 이용한 정해진 횟수의 반복- 딕셔너리의 키와 값 처리
- API나 데이터베이스에서 가져온 여러 데이터 처리
- 반복 중 특정 조건에 따른 데이터 필터링
핵심 문법을 정리하면 다음과 같습니다.
for item in items:
실행할 코드
숫자 범위를 반복하려면 range()를 사용할 수 있습니다.
for number in range(1, 6):
print(number)
반복을 즉시 종료하려면 break, 현재 반복만 건너뛰려면 continue를 사용합니다.
for문을 처음 공부한다면 먼저 리스트 순회 → range() → 조건문 → break와 continue → enumerate() → 딕셔너리 순회 → 중첩 반복문 순서로 익히는 것이 좋습니다.
자주 묻는 질문(FAQ)
Q. Python for문은 정확히 무엇을 반복하나요?
for문은 for 뒤의 반복 가능한 객체에서 값을 하나씩 가져오면서 코드를 실행합니다.
대표적으로 리스트, 튜플, 문자열, 딕셔너리, range() 등을 사용할 수 있습니다.
Q. for i in range(5)는 몇 번 반복되나요?
총 5번 반복됩니다.
i에는 순서대로 다음 값이 들어갑니다.
0, 1, 2, 3, 4
range(5)에서는 5가 포함되지 않는다는 점을 기억해야 합니다.
Q. Python for문에서 break와 continue는 어떻게 다른가요?
break는 반복문 자체를 종료합니다.
continue는 현재 반복의 남은 코드를 실행하지 않고 다음 반복으로 넘어갑니다.
따라서 특정 데이터를 발견했을 때 더 이상 반복할 필요가 없다면 break, 특정 데이터만 건너뛰고 계속 처리하려면 continue를 사용할 수 있습니다.
Q. for문에서 리스트를 어떻게 순회하나요?
리스트를 in 뒤에 넣으면 됩니다.
fruits = ["사과", "바나나", "오렌지"]
for fruit in fruits:
print(fruit)
리스트의 값이 하나씩 fruit 변수에 들어갑니다.
Q. for문에서 인덱스와 값을 동시에 가져오려면 어떻게 하나요?
enumerate()를 사용하면 됩니다.
for index, value in enumerate(items):
print(index, value)
순번을 1부터 시작하고 싶다면 enumerate(items, start=1)처럼 사용할 수 있습니다.
Q. for문과 while문 중 어떤 것을 사용해야 하나요?
데이터를 순서대로 하나씩 처리하거나 반복 범위가 명확하다면 for문이 편리합니다.
반면 특정 조건이 만족될 때까지 계속 반복해야 하고 반복 횟수를 미리 알기 어렵다면 while문이 더 적합한 경우가 많습니다.
마무리
Python의 for 반복문은 처음에는 단순히 “같은 코드를 여러 번 실행하는 문법”처럼 보이지만, 실제로는 Python에서 데이터를 처리하는 데 가장 중요한 기본 문법 중 하나입니다.
리스트를 순회하고, 문자열을 분석하고, 숫자 범위를 반복하고, 딕셔너리의 데이터를 처리하는 등 Python으로 프로그램을 만들 때 매우 다양한 곳에서 사용됩니다.
특히 for문 자체만 외우기보다는 range(), enumerate(), break, continue, 조건문과 함께 이해하는 것이 중요합니다.
가장 기본적인 형태인 for item in items:의 구조를 확실히 이해했다면 Python의 반복문 기초는 상당 부분 익힌 것입니다.
이후에는 리스트 컴프리헨션과 함수, 파일 처리, 데이터 분석 등으로 범위를 넓혀가면 for문을 실제 프로그램에서 더욱 효과적으로 활용할 수 있습니다.