목차
- 서론: 반복의 미학, 파이썬 for 문으로 여는 자동화의 세계
- 1장: 파이썬에서 반복이란 무엇인가
- 2장: 파이썬 for 문 기본 구조와 작동 원리
- 3장: 다양한 시퀀스 객체와 for 문
- 4장: range() 함수와 for 문의 강력한 조합
- 5장: enumerate(), zip()과 함께 쓰는 for 문
- 6장: 중첩 for 문(Nested for loop)
- 7장: 조건문과 함께 쓰는 for 문
- 8장: for else 문 — 잘 알려지지 않은 고급 문법
- 9장: 반복 제어 키워드 — break, continue, pass
- 10장: 실전 예제 — 다양한 문제 해결 패턴
- 결론: for 문을 이해하면 파이썬이 쉬워진다
서론: 반복의 미학, 파이썬 for 문으로 여는 자동화의 세계
우리는 일상 속에서 무수히 많은 '반복'을 경험합니다. 매일 아침 일어나는 일, 이메일을 확인하는 루틴, 업무에서 반복적으로 처리하는 데이터까지 — 반복은 효율과 자동화를 이끄는 중요한 흐름이며, 프로그래밍에서도 그 핵심에 자리 잡고 있습니다.
파이썬(Python)은 문법이 간결하고 직관적이어서 초보자에게도 접근성이 뛰어난 언어로 잘 알려져 있습니다. 그중에서도 for 문은 파이썬의 반복 구조를 대표하는 구문으로, 다양한 컬렉션 자료형을 효율적으로 순회하며 로직을 구성할 수 있게 해 줍니다. 리스트, 튜플, 딕셔너리, 문자열 등 거의 모든 시퀀스를 대상으로 반복 작업을 할 수 있으며, 조건문, 내장 함수, 컴프리헨션 등과 결합될 때 더욱 강력한 도구로 변모합니다.
이 글에서는 단순한 문법 소개를 넘어서, for 문의 작동 원리, 다양한 활용 사례, 고급 문법과 실제 문제 해결 예제까지 폭넓고 깊이 있게 다뤄볼 예정입니다. 초보자라면 기초를 탄탄히 다지고, 중급 사용자라면 복잡한 로직을 단순화하는 새로운 시각을 얻을 수 있을 것입니다.
자동화와 반복을 이해하는 순간, 프로그래밍은 더 이상 어렵지 않습니다. for 문을 이해한다는 것은 곧 파이썬이라는 언어의 본질을 꿰뚫는 첫걸음입니다. 이제 본격적으로 파이썬 for 문의 세계로 들어가 보겠습니다.
1장: 파이썬에서 반복이란 무엇인가
프로그래밍에서 '반복(Loop)'은 특정 작업을 여러 번 수행하기 위한 구조적인 도구입니다. 이는 수작업으로 같은 작업을 여러 번 수행해야 하는 번거로움을 해소하고, 코드를 보다 효율적으로 작성할 수 있게 합니다. 반복문을 사용하면 동일한 패턴의 작업을 자동화할 수 있으며, 데이터 처리와 알고리즘 구성에 있어서 필수적인 개념입니다.
파이썬에는 대표적인 두 가지 반복문이 존재합니다: for 문과 while 문. 두 반복문 모두 목적은 같지만, 사용 방식과 로직 전개에 있어서는 뚜렷한 차이점을 보입니다.
for 문과 while 문, 무엇이 다른가?
for 문
은 주로 시퀀스(리스트, 튜플, 문자열 등)나 반복 가능한 객체(iterable)를 순회(iterate)할 때 사용합니다. 즉, 몇 번 반복할지 정해진 경우에 가장 적합한 반복문입니다. 이에 반해 while 문
은 조건이 참(True)인 동안 계속해서 반복합니다. 따라서 종료 조건이 명확하지 않거나 사용자 입력에 따라 반복 횟수가 결정되는 경우에 유용합니다.
예제 1: for 문을 이용한 리스트 순회
fruits = ['apple', 'banana', 'cherry']
for fruit in fruits:
print(fruit)
위 예제는 리스트 fruits
에 들어 있는 각 요소를 순차적으로 출력합니다. 반복 횟수는 리스트의 길이만큼으로, 처음부터 끝까지 자동으로 반복됩니다.
예제 2: while 문을 이용한 조건 기반 반복
count = 0
while count < 3:
print("반복 횟수:", count)
count += 1
이 코드는 count
가 3보다 작을 동안 반복되며, 각 반복에서 변수를 1씩 증가시킵니다. 이처럼 while 문
은 반복 조건이 명시적으로 주어지며, 조건이 참인 동안 계속 반복합니다.
결론적으로, for 문은 반복할 요소의 개수가 명확할 때, while 문은 반복 조건이 논리적으로 주어질 때 각각 활용하는 것이 일반적입니다. 이 글에서는 앞으로 for 문에 초점을 맞춰, 파이썬의 반복 구조를 어떻게 효과적으로 활용할 수 있을지 깊이 탐구해 보겠습니다.
2장: 파이썬 for 문 기본 구조와 작동 원리
파이썬의 for 문은 반복 가능한 객체(iterable)의 각 요소를 순차적으로 순회하며 코드를 실행하는 반복문입니다. 다른 언어에서 흔히 사용하는 인덱스 기반의 반복(for i = 0; i < n; i++)과 달리, 파이썬의 for 문은 요소 자체에 직접 접근하기 때문에 코드가 간결하고 읽기 쉽습니다.
기본 문법 구조
for 변수 in 반복가능한_객체:
실행할_코드
예를 들어, 리스트 안에 있는 값을 하나씩 출력하는 경우를 살펴보겠습니다.
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(num)
이 코드는 리스트 numbers
의 각 요소를 num
이라는 변수에 차례로 할당하여 출력합니다. 실행 흐름은 다음과 같습니다:
num = 1
→print(1)
num = 2
→print(2)
- … 반복
num = 5
→print(5)
반복 가능한 객체(Iterable)의 의미
for 문
이 작동하기 위해서는 대상이 반복 가능한 객체(iterable)여야 합니다. 이는 내부적으로 __iter__()
메서드를 구현하고 있는 객체로, 대표적인 예는 다음과 같습니다:
- 리스트(List)
- 튜플(Tuple)
- 문자열(String)
- 딕셔너리(Dictionary)
- 집합(Set)
- range 객체
for 문 작동 원리를 시각화하면?
아래 코드는 반복 가능한 객체를 내부적으로 어떻게 처리하는지 보여줍니다.
iterable = [10, 20, 30]
iterator = iter(iterable)
print(next(iterator)) # 10
print(next(iterator)) # 20
print(next(iterator)) # 30
파이썬의 for 문
은 사실 위와 같은 iter()
와 next()
호출을 내부적으로 자동 수행합니다. 즉, iterable → iterator → next() 순서로 요소를 하나씩 꺼내 실행하는 구조입니다.
이처럼 파이썬의 for 문
은 반복 구조를 매우 직관적이면서도 유연하게 구현할 수 있게 도와줍니다. 다음 장에서는 이러한 for 문
이 실제로 다양한 시퀀스 객체에서 어떻게 활용되는지를 구체적으로 살펴보겠습니다.
3장: 다양한 시퀀스 객체와 for 문
파이썬의 for 문
은 단순한 리스트 반복을 넘어, 다양한 형태의 시퀀스 객체 및 컬렉션 자료형과 함께 사용할 수 있습니다. 이 장에서는 각 자료형별로 어떻게 for 문
을 활용할 수 있는지 실제 예제를 통해 자세히 살펴보겠습니다.
리스트(List)
리스트는 가장 기본적인 순차 자료형입니다. 요소들이 순서대로 저장되어 있어 for 문을 이용한 순회가 직관적입니다.
colors = ['red', 'green', 'blue']
for color in colors:
print(color)
각 요소가 순차적으로 변수 color
에 할당되어 출력됩니다.
튜플(Tuple)
튜플은 리스트와 유사하지만, 변경이 불가능한(immutable) 시퀀스입니다. for 문에서는 리스트와 동일한 방식으로 순회가 가능합니다.
dimensions = (1920, 1080)
for dim in dimensions:
print(dim)
문자열(String)
문자열도 반복 가능한 객체이므로 각 문자를 하나씩 순회할 수 있습니다.
message = "Python"
for char in message:
print(char)
출력 결과는 P
, y
, t
, ... 순서대로 출력됩니다.
딕셔너리(Dictionary)
딕셔너리는 키-값(key-value) 쌍으로 데이터를 저장하는 구조입니다. 기본적으로는 키만 순회되며, 메서드를 사용하여 값 또는 쌍을 함께 순회할 수 있습니다.
person = {'name': 'Alice', 'age': 30}
# 키 순회
for key in person:
print(key)
# 키와 값 함께 순회
for key, value in person.items():
print(key, value)
집합(Set)
집합은 중복을 허용하지 않는 자료형으로, 요소 간의 순서는 보장되지 않지만 반복이 가능합니다.
unique_numbers = {1, 2, 3, 3, 2}
for num in unique_numbers:
print(num)
위 코드에서 중복된 값은 제거되어, 1, 2, 3
만 출력됩니다. 단, 출력 순서는 예측할 수 없습니다.
이처럼 파이썬의 for 문
은 다양한 형태의 컬렉션과 함께 유연하게 사용될 수 있습니다. 다음 장에서는 반복 횟수를 제어하고 숫자 기반 반복을 가능하게 해주는 range() 함수를 깊이 있게 다뤄보겠습니다.
4장: range() 함수와 for 문의 강력한 조합
파이썬에서 반복을 숫자 기반으로 제어하고자 할 때 가장 자주 사용하는 도구가 바로 range() 함수입니다. range()
는 정수의 연속된 시퀀스를 생성하여 for 문
과 함께 사용할 수 있게 해줍니다. 숫자 반복이 필요한 거의 모든 상황에서 필수적으로 사용되는 내장 함수입니다.
range() 함수의 기본 구조
range()
는 최대 세 개의 인자를 받을 수 있으며, 각각은 다음과 같은 의미를 가집니다:
range(시작값, 끝값, 증가값)
- 시작값: 반복이 시작될 숫자 (생략 시 기본값은 0)
- 끝값: 반복이 종료될 기준값 (이 값은 포함되지 않음)
- 증가값: 각 반복마다 증가할 값 (생략 시 기본값은 1)
예제 1: 기본적인 range 사용
for i in range(5):
print(i)
출력 결과는 0 1 2 3 4
입니다. 끝값 5
는 포함되지 않는 점에 유의하세요.
예제 2: 시작값과 끝값 지정
for i in range(2, 7):
print(i)
출력 결과는 2 3 4 5 6
입니다. 2
부터 시작하여 7
직전까지 반복됩니다.
예제 3: 증가값 지정 (건너뛰기)
for i in range(0, 10, 2):
print(i)
출력 결과는 0 2 4 6 8
입니다. 2씩 증가하며 반복됩니다.
예제 4: 역순 반복
for i in range(10, 0, -1):
print(i)
출력 결과는 10 9 8 7 6 5 4 3 2 1
입니다. 감소값을 음수로 설정하면 역순 반복이 가능합니다.
range와 len()의 조합: 인덱스 기반 반복
리스트의 인덱스를 기반으로 반복하고 싶을 때는 range()
와 len()
을 함께 사용할 수 있습니다.
items = ['a', 'b', 'c']
for i in range(len(items)):
print(i, items[i])
이 코드는 인덱스와 해당 요소를 함께 출력합니다. 추후 enumerate()
를 사용하면 더욱 간결하게 구현할 수 있습니다.
이처럼 range()
는 숫자 반복, 인덱스 접근, 조건적 반복 등 다양한 상황에서 활용될 수 있으며, for 문
의 활용도를 한층 높여줍니다. 다음 장에서는 반복 도중 인덱스를 함께 얻거나 두 개의 시퀀스를 병렬로 처리할 수 있는 enumerate()와 zip() 함수에 대해 다뤄보겠습니다.
5장: enumerate(), zip()과 함께 쓰는 for 문
파이썬의 for 문
은 다양한 내장 함수와 결합될 때 그 진가를 발휘합니다. 그중에서도 enumerate()와 zip()은 실무에서 가장 널리 사용되는 함수로, 각각 인덱스와 값을 동시에 순회하거나 여러 시퀀스를 병렬로 순회할 수 있게 해 줍니다.
enumerate(): 인덱스와 값 동시 접근
일반적인 for 문
은 리스트의 요소만을 순회하지만, 때로는 인덱스 정보도 함께 필요할 수 있습니다. 이때 enumerate()
를 사용하면 보다 간결하고 파이썬다운 코드를 작성할 수 있습니다.
예제: 인덱스와 값을 함께 출력
languages = ['Python', 'Java', 'C++']
for index, lang in enumerate(languages):
print(index, lang)
출력 결과는 다음과 같습니다:
0 Python
1 Java
2 C++
기본적으로 enumerate()
는 0부터 시작하는 인덱스를 제공합니다. 필요 시 시작 인덱스를 변경할 수도 있습니다.
for index, lang in enumerate(languages, start=1):
print(index, lang)
이렇게 하면 인덱스가 1부터 시작됩니다.
zip(): 여러 시퀀스를 병렬 순회
zip()
함수는 두 개 이상의 반복 가능한 객체를 병렬로 순회할 때 사용됩니다. 각 시퀀스의 동일한 위치에 있는 요소들을 튜플로 묶어 반환합니다.
예제: 학생 이름과 점수를 함께 출력
names = ['Alice', 'Bob', 'Charlie']
scores = [85, 90, 78]
for name, score in zip(names, scores):
print(name, score)
출력 결과는 다음과 같습니다:
Alice 85
Bob 90
Charlie 78
만약 시퀀스의 길이가 다르면, zip()
은 가장 짧은 시퀀스를 기준으로 반복을 종료합니다.
enumerate()와 zip()의 응용
두 함수를 동시에 사용할 수도 있습니다. 예를 들어, 순번과 함께 여러 시퀀스를 병렬로 출력할 때 유용합니다.
for idx, (name, score) in enumerate(zip(names, scores), start=1):
print(f"{idx}. {name} - {score}점")
출력:
1. Alice - 85점
2. Bob - 90점
3. Charlie - 78점
이처럼 enumerate()
와 zip()
은 파이썬의 반복문을 더욱 강력하고 읽기 쉬운 형태로 만들어주는 도구입니다. 다음 장에서는 중첩 for 문을 통해 다차원 자료를 순회하는 방법을 학습해 보겠습니다.
6장: 중첩 for 문(Nested for loop)
하나의 반복문 안에 또 다른 반복문을 넣는 것을 중첩 for 문(nested for loop)이라고 합니다. 이는 특히 2차원 리스트, 행렬, 테이블 형식의 데이터를 다룰 때 매우 유용하게 사용됩니다. 반복을 통해 반복을 제어함으로써 다차원 구조의 데이터를 순차적으로 처리할 수 있습니다.
기본 구조
for 바깥변수 in 반복가능한_객체1:
for 안쪽변수 in 반복가능한_객체2:
실행할_코드
이 구조는 객체1
의 요소마다 객체2
전체를 순회하게 됩니다. 즉, 바깥 반복 1회당 안쪽 반복은 전체 순회를 반복하게 됩니다.
예제: 2차원 리스트 순회
2차원 리스트는 리스트 안에 또 다른 리스트가 포함된 구조이며, 흔히 행과 열로 이루어진 데이터(표 형태)를 표현할 때 사용됩니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for col in row:
print(col, end=' ')
print()
출력 결과는 다음과 같습니다:
1 2 3
4 5 6
7 8 9
이 예제에서 row
는 행 단위로 리스트를 가져오고, col
은 각 행의 요소를 순회합니다. end=' '
를 사용해 줄바꿈 없이 출력하고, 행이 끝나면 print()
로 줄을 나눠줍니다.
예제: 구구단 출력
중첩 for 문은 구구단과 같은 곱셈 테이블을 출력할 때도 자주 사용됩니다.
for i in range(2, 10):
for j in range(1, 10):
print(f"{i} x {j} = {i * j}")
print("-" * 10)
각 단마다 1부터 9까지 곱한 결과를 출력하며, 단 구분을 위해 줄마다 구분선을 출력합니다.
실전 활용: 데이터 정렬 및 필터링
중첩 반복문은 단순 출력뿐 아니라 데이터 가공, 조건 분기, 필터링에도 활용됩니다. 예를 들어, 행렬에서 짝수만 출력하고 싶다면 다음과 같이 구현할 수 있습니다.
for row in matrix:
for col in row:
if col % 2 == 0:
print(col, end=' ')
print()
위 예제는 각 행마다 짝수만 출력합니다. 조건문과 함께 사용하면 중첩 for 문은 매우 강력한 도구가 됩니다.
중첩 반복은 복잡한 데이터 구조를 효과적으로 탐색하거나 처리할 수 있는 강력한 방법입니다. 하지만 반복의 깊이가 깊어질수록 코드의 복잡도와 성능 저하 가능성도 함께 증가하므로, 필요 이상으로 중첩하지 않도록 주의해야 합니다.
다음 장에서는 for 문과 조건문을 결합하여 데이터를 필터링하고, 리스트 컴프리헨션으로 한 줄에 표현하는 방법을 배워보겠습니다.
7장: 조건문과 함께 쓰는 for 문
실제 프로그래밍에서는 단순히 모든 데이터를 반복하는 것보다, 특정 조건에 부합하는 경우에만 실행하도록 제어하는 것이 더 중요합니다. 이때 for 문
과 if 문
을 함께 사용하면, 조건 기반 필터링이나 처리 로직을 쉽게 구현할 수 있습니다.
조건문과 함께 쓰는 기본 구조
for 변수 in 반복가능한_객체:
if 조건:
실행할_코드
예제: 리스트에서 짝수만 출력
numbers = [1, 2, 3, 4, 5, 6]
for num in numbers:
if num % 2 == 0:
print(num)
이 코드는 짝수만 출력합니다. for
와 if
의 결합으로 조건에 따라 실행 여부를 결정합니다.
예제: 문자열에서 모음만 추출
text = "Python Programming"
vowels = 'aeiouAEIOU'
for char in text:
if char in vowels:
print(char, end=' ')
출력 결과는 o o a i
입니다. 문자열을 문자 단위로 순회하면서 조건에 맞는 문자만 필터링합니다.
리스트 컴프리헨션으로 더 간결하게
같은 조건 기반 반복을 더 짧고 명확하게 작성할 수 있는 방법이 바로 리스트 컴프리헨션(list comprehension)입니다. 이는 for 문
과 if 문
을 한 줄로 표현할 수 있는 파이썬의 강력한 기능입니다.
예제: 짝수만 추출하여 리스트로 반환
even_numbers = [num for num in numbers if num % 2 == 0]
print(even_numbers)
출력 결과는 [2, 4, 6]
입니다. 반복과 조건을 한 줄로 요약할 수 있어 코드가 훨씬 간결해집니다.
예제: 특정 문자로 시작하는 단어 필터링
words = ["apple", "banana", "cherry", "avocado"]
a_words = [word for word in words if word.startswith('a')]
print(a_words)
결과는 ['apple', 'avocado']
. 문자열 처리에서도 리스트 컴프리헨션은 매우 강력하게 작동합니다.
조건 삼항 연산자와 함께 쓰기
리스트 컴프리헨션은 조건 분기까지도 한 줄로 처리할 수 있습니다. 이를 조건 표현식(삼항 연산자)과 함께 사용할 수 있습니다.
results = ["짝수" if num % 2 == 0 else "홀수" for num in numbers]
print(results)
출력 결과는 ['홀수', '짝수', '홀수', '짝수', '홀수', '짝수']
. 값에 따라 다른 처리를 하면서도 한 줄에 표현할 수 있습니다.
이처럼 조건문과 함께 사용하는 for 문
은 데이터를 선별하거나 가공하는 데 매우 효과적입니다. 리스트 컴프리헨션은 가독성과 성능을 모두 향상시켜주며, 파이썬에서 매우 자주 활용되는 패턴입니다.
다음 장에서는 많은 이들이 존재조차 모르는 for-else 문이라는 독특한 구조를 살펴보며, 반복문 종료 조건과 로직 흐름에 대해 더 깊이 이해해보겠습니다.
8장: for else 문 — 잘 알려지지 않은 고급 문법
파이썬의 for-else 문은 다른 언어에서는 흔히 볼 수 없는 독특한 문법 구조입니다. 처음 접하는 사람에게는 다소 낯설 수 있지만, 반복문이 특정 조건 없이 끝났는지 여부를 판단해야 할 때 매우 유용하게 사용됩니다. 특히 검색, 탐색, 검증 로직에서 깔끔하게 활용할 수 있습니다.
기본 구조
for 변수 in 반복가능한_객체:
if 조건:
break
else:
실행할_코드
여기서 핵심은 break 문이 실행되지 않았을 경우에만 else
블록이 실행된다는 점입니다. 즉, 반복이 정상적으로 끝났을 때 실행되며, break
에 의해 중단되면 else
는 무시됩니다.
예제: 숫자 리스트에서 소수 찾기
n = 29
for i in range(2, n):
if n % i == 0:
print(f"{n}는 소수가 아닙니다.")
break
else:
print(f"{n}는 소수입니다.")
이 예제에서 n
이 어떤 수로도 나누어지지 않으면 반복이 끝나고 else
블록이 실행되어 "소수입니다."를 출력합니다. 반대로 나누어지는 수가 발견되면 break
로 반복이 중단되고, else
는 무시됩니다.
예제: 사용자 인증 시스템
users = ['alice', 'bob', 'charlie']
target = 'dave'
for user in users:
if user == target:
print("사용자가 존재합니다.")
break
else:
print("사용자를 찾을 수 없습니다.")
target
이 리스트에 없다면 반복이 끝나고 else
가 실행됩니다. 이는 검색 실패 시 처리 로직을 명확히 분리할 수 있어 가독성이 높아집니다.
주의할 점
else
는for 문
또는while 문
에만 사용할 수 있으며,if 문
의else
와는 전혀 다른 기능입니다.- 반복이 정상 종료되었을 때만
else
가 실행됩니다. break
가 실행되면else
는 무시됩니다.
이처럼 for-else
는 알고리즘이나 탐색 로직에서 조건이 충족되지 않았을 때 별도로 처리해야 하는 상황에서 매우 유용합니다. 다음 장에서는 break
, continue
, pass
와 같이 반복 흐름을 제어하는 핵심 키워드들에 대해 살펴보겠습니다.
9장: 반복 제어 키워드 — break, continue, pass
반복문을 작성하다 보면 단순히 모든 요소를 순회하는 것만으로는 원하는 결과를 얻기 어려운 경우가 많습니다. 때로는 반복을 중단하거나(skip), 특정 조건에서 아무 작업도 하지 않고 넘어가야 할 필요가 있습니다. 이런 상황에서 파이썬은 세 가지 강력한 제어 키워드를 제공합니다: break
, continue
, pass
.
1. break — 반복 즉시 종료
break
는 반복문 내부에서 사용되며, 조건이 충족되면 반복을 즉시 중단합니다. 이후의 반복은 수행되지 않고, 반복문 바깥으로 빠져나갑니다.
예제: 특정 값 찾기
numbers = [1, 3, 5, 7, 9, 10, 13]
for num in numbers:
if num % 2 == 0:
print(f"처음으로 찾은 짝수: {num}")
break
출력 결과는 처음으로 찾은 짝수: 10
. 조건을 만족한 순간 반복이 종료됩니다.
2. continue — 해당 반복만 건너뛰기
continue
는 반복 중 특정 조건을 만족할 경우 현재 반복을 건너뛰고, 다음 반복으로 즉시 넘어갑니다. 반복 자체는 계속 진행됩니다.
예제: 홀수만 출력
for num in numbers:
if num % 2 == 0:
continue
print(num)
짝수일 경우 continue
가 실행되어 출력하지 않고 건너뜁니다. 출력은 1, 3, 5, 7, 9, 13
.
3. pass — 아무 작업도 하지 않음
pass
는 문법적으로 코드가 필요한 위치에서 아무 동작도 하지 않고 넘어갈 때 사용합니다. 함수나 클래스, 조건문 또는 반복문 블록을 임시로 비워둘 때 매우 유용합니다.
예제: 조건별 로직 미구현 시 사용
for num in numbers:
if num % 2 == 0:
pass # 추후 짝수에 대한 처리가 필요
else:
print(f"홀수: {num}")
pass
는 실제로 아무런 동작을 하지 않지만, 문법적으로 블록이 필요한 경우 오류를 방지합니다. 유지보수나 프로토타입 단계에서 자주 활용됩니다.
요약 비교
키워드 | 기능 | 반복 흐름 |
---|---|---|
break |
반복 즉시 종료 | 반복문 밖으로 탈출 |
continue |
현재 반복만 건너뜀 | 다음 반복으로 이동 |
pass |
아무 작업도 하지 않음 | 해당 위치에서 그냥 넘어감 |
이처럼 반복 흐름 제어 키워드는 for 문을 보다 유연하고 상황에 맞게 활용할 수 있도록 돕습니다. 특히 실무 코드에서는 조건 분기와 예외 처리를 위한 중요한 도구로 널리 사용되므로 반드시 이해하고 숙련해둘 필요가 있습니다.
이제까지 학습한 내용을 바탕으로, 다음 장에서는 실전에서 유용하게 사용할 수 있는 반복문 기반의 문제 해결 예제들을 함께 풀어보겠습니다.
10장: 실전 예제 — 다양한 문제 해결 패턴
이제까지 파이썬 for 문
의 기본 구조부터 고급 활용까지 단계적으로 살펴보았습니다. 이번 장에서는 실제로 자주 마주치는 반복문 문제들을 해결해보며, 실용적 사고와 코딩 능력을 함께 키워보겠습니다.
예제 1: 리스트에서 중복 제거
중복된 데이터를 제거하고, 고유한 값만 남기고 싶을 때 가장 기본적이면서도 중요한 반복 패턴입니다.
items = [1, 2, 2, 3, 4, 4, 5]
unique = []
for item in items:
if item not in unique:
unique.append(item)
print(unique)
출력 결과는 [1, 2, 3, 4, 5]
. if not in
조건을 통해 이미 추가된 값은 건너뛰게 구성합니다.
예제 2: 특정 패턴의 문자열 추출
문자열 데이터에서 이메일 주소처럼 특정 형식의 데이터만 추출하는 상황은 매우 흔합니다.
texts = ["hello", "test@example.com", "123", "data@naver.com"]
emails = []
for text in texts:
if "@" in text and "." in text:
emails.append(text)
print(emails)
출력 결과는 ['test@example.com', 'data@naver.com']
. 간단한 조건 조합만으로도 필터링이 가능합니다.
예제 3: 다중 조건 필터링
숫자 리스트에서 짝수이면서 3의 배수인 값만 필터링해보겠습니다.
numbers = list(range(1, 51))
result = []
for num in numbers:
if num % 2 == 0 and num % 3 == 0:
result.append(num)
print(result)
출력 결과는 [6, 12, 18, 24, 30, 36, 42, 48]
. and
조건을 활용한 다중 필터링 예입니다.
예제 4: 딕셔너리 값 기준 정렬
딕셔너리의 값을 기준으로 정렬된 형태로 출력하는 것도 자주 활용되는 패턴입니다.
scores = {'Alice': 85, 'Bob': 72, 'Charlie': 90}
for name in sorted(scores, key=scores.get, reverse=True):
print(f"{name}: {scores[name]}")
출력 결과는 점수 순으로 정렬된 학생 이름과 점수입니다. sorted()
와 key
매개변수의 조합은 실무에서도 자주 사용됩니다.
예제 5: 2차원 리스트 행, 열 합계 구하기
중첩 반복을 활용하여 행과 열의 합계를 계산해보겠습니다.
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
# 행의 합
for row in matrix:
print("행 합:", sum(row))
# 열의 합
for col in range(len(matrix[0])):
total = 0
for row in matrix:
total += row[col]
print("열 합:", total)
행은 리스트 하나를 바로 sum()
으로 처리할 수 있지만, 열은 인덱스를 통해 세로 방향으로 누적 계산해야 합니다. 이 패턴은 엑셀, DB 등 행렬 데이터를 다룰 때 유용합니다.
이처럼 반복문은 단순한 순회 기능을 넘어서, 데이터를 탐색하고 가공하며 조건에 따라 분기하는 강력한 도구로 작동합니다. 다양한 조건과 구조를 직접 다뤄보면서, 반복문이 프로그래밍의 핵심이라는 사실을 실감할 수 있게 됩니다.
다음은 마지막 장인 결론으로, 지금까지 배운 내용을 정리하고 for 문이 갖는 의미와 활용에 대해 되짚어보겠습니다.
결론: for 문을 이해하면 파이썬이 쉬워진다
파이썬의 for 문
은 단순히 반복을 위한 도구가 아닙니다. 그것은 데이터를 순회하고, 조건에 따라 분기하며, 원하는 결과를 추출해내는 논리적 사고의 핵심 구조입니다. 프로그래밍의 본질은 반복과 조건의 조합이라고 해도 과언이 아닙니다. 그 중심에 바로 for 문
이 있습니다.
이번 글에서는 for 문
의 기본적인 구조부터, 다양한 시퀀스 객체와의 연동, 조건문과의 결합, 리스트 컴프리헨션, 고급 문법인 for-else
, 그리고 반복 흐름 제어 키워드와 실전 예제까지 폭넓게 다루었습니다. 단순한 반복 이상의 사고가 필요한 지점에서, for 문
은 언제나 명료하고 강력한 해답이 되어줍니다.
무심코 지나쳤던 반복문의 작동 원리를 이해하고, 상황에 맞는 최적의 구문을 선택할 수 있는 능력은 단순한 코딩을 넘어 문제를 분석하고 구조화하는 사고력으로 이어집니다. 이는 초보자에게는 자신감을, 숙련자에게는 효율을 제공합니다.
마지막으로 강조하고 싶은 메시지는 이것입니다. for 문을 정확히 이해하고 자유자재로 활용할 수 있다면, 파이썬이라는 언어 전체가 명료하게 보이기 시작한다는 점입니다. 반복의 미학 속에서 진짜 파이썬다움을 발견하는 여정이 되었기를 바랍니다.
이제, 반복을 넘어 논리로. 코드를 넘어 사고로. for 문과 함께 당신의 파이썬 여정을 더욱 깊고 넓게 확장해보시길 바랍니다.
Comments
Post a Comment