for 문
test_list = ['one', 'two', 'three']
for i in test_list:
print(i)
# one
# two
# three
- 반복 가능한 자료형의 요소를 하나씩 변수에 대입하며 반복 수행함.
- if, continue, break, 중첩 for문 모두 가능하다.
- for 변수 in 반복_가능_객체:
- **수행할_문장1** **수행할_문장2**
a = [(1,2), (3,4), (5,6)]
for (x, y) in a:
print(x + y)
# 3
# 7
# 11
리스트, 튜플, 문자열 등을 반복 가능 객체로 사용 가능하다.
주의할점. for문에서 임시변수를 아무리 바꿔도 원본 객체의 값은 변하지 않는다.
numbers = [10, 20, 30]
for n in numbers:
n = n + 5
print("임시변수 n:", n)
print("원본 numbers:", numbers)
왜냐하면 임시변수는 “원본 데이터를 담은 새로운 변수”일 뿐,
원래 객체 내부의 요소를 가리키는 참조(reference)가 아니기 때문.
items()
students = {
"철수": {"국어":100, "수학":90},
"영희": {"국어":95, "수학":85},
}
for name in students: # 철수 영희
print(name)
for name, student in students: # ❌ 에러
print(name, student)
for name, student in students.items():
print(name, student)
# 철수 {'국어': 100, '수학': 90}
# 영희 {'국어': 95, '수학': 85}
- 디셔너리를 그냥 반복하면 name에는 키(key) 하나만 들어감
- name, student 처럼 두 개를 받으려고 하면 Python은 튜플 언패킹을 시도하는데, 반복 값이 **하나(key)**뿐이므로 언패킹할 수 없어서 오류가 납니다.
- 키와 값을 두 개를 받고 싶다면 .items()를 활용해야 합니다.
range()
숫자 시퀀스를 만들어주는 내장 함수로 주로 for문과 함께 사용한다.
range(끝) # 0부터 끝-1까지
range(시작, 끝) # 시작부터 끝-1까지
range(시작, 끝, 증가값) # 시작부터 끝-1까지, 증가값만큼 증가
0부터 4까지 반복
for i in range(5): # 0, 1, 2, 3, 4
1부터 5까지 반복
for i in range(1, 6): # 1, 2, 3, 4, 5
0부터 10까지 2씩 증가
for in range(0, 11, 2): #0, 2, 4, 6, 8, 10
for i in range(2, 10): # 2단~9단
for j in range(1, 10): # 1~9 곱
print(f"{i}x{j}={i*j}", end="\\t")
print() # 단 끝나면 줄바꿈
# 2 4 6 8 10 12 14 16 18
# 3 6 9 12 15 18 21 24 27
# 4 8 12 16 20 24 28 32 36
# 5 10 15 20 25 30 35 40 45
# 6 12 18 24 30 36 42 48 54
# 7 14 21 28 35 42 49 56 63
# 8 16 24 32 40 48 56 64 72
# 9 18 27 36 45 54 63 72 81
enumerate()
리스트/튜플 순회 시 인덱스와 값 동시에 사용
fruits = ['apple','banana']
for idx, fruit in enumerate(fruits):
print(idx, fruit)
# 0 apple
# 1 banana
for idx, fruit in enumerate(fruits, **1):**
라고 사용하면 시작 번호를 1부터 시작한다.
값: 1 apple
2 banana
zip()
두 개 이상의 리스트를 동시에 순회하고 싶을 때는 zip 함수를 사용한다.
names = ['홍길동', '김철수', '이영희']
korean = [85, 92, 78]
english = [90, 88, 95]
for name, kor, eng in zip(names, korean, english):
print(f"{name}: 국어 {kor}점, 영어 {eng}점")
# 홍길동: 국어 85점, 영어 90점
# 김철수: 국어 92점, 영어 88점
# 이영희: 국어 78점, 영어 95점
컴프리헨션
리스트 컴프리헨션
리스트 안에 for 문을 포함하는 **리스트 컴프리헨션(list comprehension)**을 사용하면 좀 더 편리하고 직관적인 프로그램을 만들 수 있다.
[표현식 for 항목 in 반복_가능_객체 if 조건문]
a = [1,2,3,4]
result = [num * 3 for num in a]
print(result)
# [3, 6, 9, 12]
표현식: num*3
for
항목: num
in
반복_가능_객체: a
a = [1,2,3,4]
result = [num * 3 for num in a if num % 2 == 0]
print(result)
# [6, 12]
표현식: num*3
for
항목: num
in
반복_가능_객체: a
if
조건문: num % 2 == 0
딕셔너리 컴프리헨션
{key_expr: value_expr for item in iterable if 조건식}
- key_expr → 딕셔너리 키
- value_expr → 딕셔너리 값
- iterable → 반복 가능한 객체
- if 조건식 → 선택적으로 조건 필터링
예제 코드)
# 점수 → 학점 변환 함수
def get_grade(score):
if score < 60:
return "F"
elif score < 70:
return "D"
elif score < 80:
return "C"
elif score < 90:
return "B"
else:
return "A"
# 학생별 점수 데이터
scores = {
"철수": {"국어": 90, "수학": 95, "영어": 78, "과학": 55},
"짱구": {"국어": 60, "수학": 85, "영어": 40, "과학": 75}
}
# 학생별 성적표 데이터 생성 함수
def get_student_report(scores_dict):
report = {}
for name, subjects in scores_dict.items():
report[name] = {subject: get_grade(score) for subject, score in subjects.items()}
return report
# 출력 전용 함수
def print_report(scores_dict):
report = get_student_report(scores_dict)
for name, subjects in report.items():
print(f"학생 이름: {name}")
for subject, grade in subjects.items():
print(f" - {subject}: {scores_dict[name][subject]}점 ({grade})")
print("-" * 40)
# 실행
print_report(scores)