파이썬(Python) for 반복문 종합 가이드: 기초부터 고급 활용까지
for 반복문 개요
파이썬의 for 문은 반복문의 한 종류로,
특정 시퀀스(리스트, 튜플, 문자열 등)의 요소들을 순차적으로 반복하거나
특정 횟수만큼 코드 블록을 실행할 때 사용합니다.
for 문은 파이썬에서 가장 많이 사용되는 반복 구조 중 하나로,
데이터 처리나 알고리즘 구현에 필수적인 요소입니다.
다른 프로그래밍 언어의 for 문과 달리
파이썬의 for 문은 '각 항목에 대해(for each)' 동작하는 방식으로 설계되어 있어
더 직관적이고 사용하기 쉽습니다.
- 시퀀스(리스트, 튜플, 문자열 등)의 요소를 순차적으로 접근
- range() 함수와 함께 사용하여 특정 횟수만큼 반복
- 중첩하여 사용 가능(2차원 이상의 데이터 처리)
- 리스트 컴프리헨션과 결합하여 강력한 데이터 처리 가능
기본 for 문 사용법
파이썬의 for 문 기본 구조는 다음과 같습니다:
for 변수 in 시퀀스:
실행할 코드
여기서 '변수'는 시퀀스의 각 요소가 순차적으로 할당되는 변수이고, '시퀀스'는 반복 가능한 객체(iterable)입니다.
예제 1: 간단한 for 문
# 리스트의 각 요소 출력하기
fruits = ['사과', '바나나', '체리', '딸기']
for fruit in fruits:
print(fruit)
실행 결과:
사과
바나나
체리
딸기
이 예제에서 'fruit' 변수는 리스트 'fruits'의 각 요소를 순차적으로 가리키게 됩니다.
예제 2: 문자열과 for 문
# 문자열의 각 문자 출력하기
message = "Hello"
for char in message:
print(char)
실행 결과:
H
e
l
l
o
문자열도 시퀀스이므로 for 문으로 각 문자에 접근할 수 있습니다.
range() 함수와 for 문
range() 함수는 숫자 시퀀스를 생성하여 for 문과 함께 자주 사용됩니다.
특정 횟수만큼 반복하거나 일정 간격의 숫자를 생성할 때 유용합니다.
range() 함수의 사용법
- `range(stop)`: 0부터 stop-1까지의 숫자 시퀀스 생성
- `range(start, stop)`: start부터 stop-1까지의 숫자 시퀀스 생성
- `range(start, stop, step)`: start부터 stop-1까지 step 간격으로 숫자 시퀀스 생성
예제 3: 기본 range() 사용
# 0부터 4까지 출력
for i in range(5):
print(i, end=", ")
실행 결과:
0, 1, 2, 3, 4,
예제 4: 시작과 끝 지정
# 1부터 10까지 출력
for i in range(1, 11):
print(i, end=", ")
실행 결과:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
예제 5: 간격 지정
# 0부터 20까지 2씩 증가하며 출력 (짝수만)
for i in range(0, 21, 2):
print(i, end=", ")
실행 결과:
0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20,
예제 6: 역순 반복
# 10부터 1까지 역순으로 출력
for i in range(10, 0, -1):
print(i, end=", ")
실행 결과:
10, 9, 8, 7, 6, 5, 4, 3, 2, 1,
리스트와 for 문
리스트는 파이썬에서 가장 많이 사용되는 데이터 구조 중 하나로,
for 문과 함께 사용하면 데이터 처리가 매우 편리합니다.
예제 7: 리스트 요소 처리
# 리스트의 각 숫자를 제곱하여 출력
numbers = [1, 2, 3, 4, 5]
for num in numbers:
print(f"{num}의 제곱은 {num**2}입니다.")
실행 결과:
1의 제곱은 1입니다.
2의 제곱은 4입니다.
3의 제곱은 9입니다.
4의 제곱은 16입니다.
5의 제곱은 25입니다.
예제 8: enumerate() 함수 사용
enumerate() 함수는 시퀀스의 요소와 해당 인덱스를 함께 반환합니다.
# 과일 리스트의 인덱스와 값 함께 출력
fruits = ['사과', '바나나', '체리', '딸기']
for index, fruit in enumerate(fruits):
print(f"{index}번째 과일: {fruit}")
실행 결과:
0번째 과일: 사과
1번째 과일: 바나나
2번째 과일: 체리
3번째 과일: 딸기
예제 9: 리스트 수정하기
# 리스트의 모든 요소에 10을 더하기
numbers = [5, 10, 15, 20, 25]
for i in range(len(numbers)):
numbers[i] += 10
print(numbers)
실행 결과:
[15, 20, 25, 30, 35]
리스트의 요소를 수정할 때는 인덱스를 사용하는 방법이 효과적입니다.
딕셔너리와 for 문
딕셔너리는 키-값 쌍으로 이루어진 데이터 구조로, for 문을 통해 여러 방식으로 순회할 수 있습니다.
예제 10: 딕셔너리 키 순회
# 딕셔너리의 키를 순회
student = {
'name': '김철수',
'age': 20,
'major': '컴퓨터공학',
'grade': 'A'
}
for key in student:
print(f"키: {key}, 값: {student[key]}")
실행 결과:
키: name, 값: 김철수
키: age, 값: 20
키: major, 값: 컴퓨터공학
키: grade, 값: A
예제 11: items() 메서드 사용
# 딕셔너리의 키와 값을 동시에 순회
student = {
'name': '김철수',
'age': 20,
'major': '컴퓨터공학',
'grade': 'A'
}
for key, value in student.items():
print(f"{key}: {value}")
실행 결과:
name: 김철수
age: 20
major: 컴퓨터공학
grade: A
예제 12: values() 메서드 사용
# 딕셔너리의 값만 순회
student = {
'name': '김철수',
'age': 20,
'major': '컴퓨터공학',
'grade': 'A'
}
for value in student.values():
print(value)
실행 결과:
김철수
20
컴퓨터공학
A
딕셔너리 순회는 데이터 분석이나 정보 처리에 매우 유용합니다.
중첩 for 문
중첩 for 문은 for 문 안에 또 다른 for 문을 포함하는 구조로,
2차원 이상의 데이터를 처리하거나 복잡한 패턴을 생성할 때 사용합니다.
예제 13: 구구단 출력
# 구구단 2단부터 9단까지 출력
for i in range(2, 10):
print(f"===== {i}단 =====")
for j in range(1, 10):
print(f"{i} x {j} = {i*j}")
print() # 단 사이에 빈 줄 추가
실행 결과 (일부):
===== 2단 =====
2 x 1 = 2
2 x 2 = 4
...
2 x 9 = 18
===== 3단 =====
...
이 예제에서는 바깥쪽 for 문이 단수를 순회하고, 안쪽 for 문이 각 단의 곱셈을 수행합니다.
예제 14: 2차원 리스트 처리
# 2차원 리스트의 모든 요소 출력
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
for row in matrix:
for element in row:
print(element, end=" ")
print() # 행이 끝날 때마다 줄바꿈
실행 결과:
1 2 3
4 5 6
7 8 9
예제 15: 별표 패턴 출력
# 삼각형 별표 패턴 출력
rows = 5
for i in range(1, rows + 1):
for j in range(i):
print("*", end="")
print()
실행 결과:
*
**
***
****
*****
중첩 for 문은 복잡한 패턴이나 알고리즘을 구현할 때 매우 유용하지만,
너무 많이 중첩하면 코드 가독성과 성능이 저하될 수 있으므로 주의해야 합니다.
리스트 컴프리헨션
리스트 컴프리헨션(List Comprehension)은
for 문을 사용하여 간결하게 리스트를 생성하는 파이썬의 강력한 기능입니다.
기존의 for 문보다 더 간결하고 가독성이 좋은 코드를 작성할 수 있습니다.
예제 16: 기본 리스트 컴프리헨션
# 1부터 10까지의 제곱 값 리스트 생성
squares = [x**2 for x in range(1, 11)]
print(squares)
실행 결과:
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
예제 17: 조건부 리스트 컴프리헨션
# 1부터 20까지의 짝수만 포함하는 리스트 생성
even_numbers = [x for x in range(1, 21) if x % 2 == 0]
print(even_numbers)
실행 결과:
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20]
예제 18: 중첩 리스트 컴프리헨션
# 2차원 행렬의 전치(transpose) 구현
matrix = [
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]
]
transposed = [[row[i] for row in matrix] for i in range(len(matrix[0]))]
print(transposed)
실행 결과:
[[1, 4, 7], [2, 5, 8], [3, 6, 9]]
리스트 컴프리헨션은 코드를 간결하게 만들지만,
너무 복잡한 표현식은 오히려 가독성을 해칠 수 있으므로 적절히 사용해야 합니다.
고급 for 문 테크닉
파이썬의 for 문은 다양한 고급 기능과 함께 사용하여 더욱 강력한 코드를 작성할 수 있습니다.
예제 19: zip() 함수 사용
zip() 함수는 여러 시퀀스를 병렬로 순회할 수 있게 해줍니다.
# 두 리스트를 동시에 순회
names = ['김철수', '이영희', '박민수']
scores = [85, 92, 78]
for name, score in zip(names, scores):
print(f"{name}의 점수: {score}")
실행 결과:
김철수의 점수: 85
이영희의 점수: 92
박민수의 점수: 78
예제 20: break와 continue 문
break는 반복문을 즉시 종료하고,
continue는 현재 반복을 건너뛰고 다음 반복으로 진행합니다.
# break 문 사용 예제
for i in range(1, 11):
if i == 6:
break
print(i, end=" ")
실행 결과:
1 2 3 4 5
# continue 문 사용 예제
for i in range(1, 11):
if i % 2 == 0: # 짝수인 경우
continue
print(i, end=" ")
실행 결과:
1 3 5 7 9
예제 21: else 절과 for 문
파이썬의 for 문은 else 절을 포함할 수 있으며,
반복문이 break 없이 정상적으로 완료되었을 때 실행됩니다.
# for-else 문 사용 예제
for i in range(1, 6):
print(i, end=" ")
else:
print("\n반복문이 정상적으로 완료되었습니다.")
실행 결과:
1 2 3 4 5
반복문이 정상적으로 완료되었습니다.
# break로 중단된 경우
for i in range(1, 6):
if i == 3:
break
print(i, end=" ")
else:
print("\n반복문이 정상적으로 완료되었습니다.")
실행 결과:
1 2
이 경우 break로 인해 반복문이 중단되었으므로 else 블록은 실행되지 않습니다.
for-else 구문은 특히 검색 알고리즘에서 유용합니다. 특정 조건을 만족하는 요소를 찾으면 break로 빠져나가고, 찾지 못한 경우 else 블록에서 "찾지 못함" 처리를 할 수 있습니다.
예제 22: 제너레이터 표현식
제너레이터 표현식은
리스트 컴프리헨션과 비슷하지만 메모리를 더 효율적으로 사용합니다.
# 제너레이터 표현식 사용
squares_gen = (x**2 for x in range(1, 11))
# 제너레이터 객체 사용
for square in squares_gen:
print(square, end=" ")
실행 결과:
1 4 9 16 25 36 49 64 81 100
예제 23: any()와 all() 함수
any()와 all() 함수는 for 문의 결과를 간단하게 평가할 수 있게 해줍니다.
# any() 함수 - 하나라도 True면 True 반환
numbers = [0, 0, 1, 0, 0]
result = any(num > 0 for num in numbers)
print(f"양수가 하나라도 있나요? {result}")
# all() 함수 - 모두 True여야 True 반환
numbers = [1, 2, 3, 4, 5]
result = all(num > 0 for num in numbers)
print(f"모두 양수인가요? {result}")
실행 결과:
양수가 하나라도 있나요? True
모두 양수인가요? True
결론
파이썬의 for 문은 단순한 반복 구조를 넘어
다양한 데이터 처리와 알고리즘 구현에 필수적인 도구입니다.
기본적인 시퀀스 순회부터 복잡한 중첩 반복, 리스트 컴프리헨션, 고급 테크닉까지 다양한 방식으로 활용할 수 있습니다.
for 문의 핵심 장점은 다음과 같습니다:
1. 직관적인 문법으로 코드의 가독성 향상
2. 다양한 데이터 구조(리스트, 튜플, 딕셔너리 등)와 함께 사용 가능
3. 중첩하여 복잡한 데이터 처리 가능
4. 리스트 컴프리헨션과 결합하여 간결한 코드 작성 가능
5. 다양한 내장 함수(enumerate, zip, range 등)와 함께 활용 가능
파이썬 프로그래밍에서 for 문의 다양한 활용법을 익히면 더 효율적이고 간결한 코드를 작성할 수 있으며,
복잡한 문제도 쉽게 해결할 수 있습니다.
이 글에서 소개한 다양한 예제를 직접 실습하고 응용해보면서 for 문의 활용 능력을 향상시켜 보세요.
- 간단한 반복은 for 문을, 복잡한 조건부 반복은 while 문을 사용하는 것이 일반적입니다.
- 리스트 컴프리헨션은 간결하지만, 너무 복잡한 표현은 일반 for 문으로 풀어쓰는 것이 가독성에 좋습니다.
- 대용량 데이터를 처리할 때는 제너레이터 표현식을 활용하여 메모리 효율성을 높이세요.
- 중첩 for 문은 성능에 영향을 줄 수 있으므로, 가능하면 알고리즘을 최적화하거나 벡터화된 연산을 고려하세요.
[ 파이썬 관련 블로그 글 목록 ]
파이썬(Python) 블로그 목록