Day 7: 컴프리헨션
리스트 컴프리헨션
반복문을 한 줄로 축약하여 리스트를 생성합니다.
# 기존 방식
squares = []
for x in range(10):
squares.append(x ** 2)
# 컴프리헨션
squares = [x ** 2 for x in range(10)]
print(squares) # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
조건 필터링
# 짝수만 필터링
evens = [x for x in range(20) if x % 2 == 0]
print(evens) # [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
# if-else 표현식
labels = ["짝수" if x % 2 == 0 else "홀수" for x in range(5)]
print(labels) # ['짝수', '홀수', '짝수', '홀수', '짝수']
딕셔너리 컴프리헨션
names = ["Alice", "Bob", "Charlie"]
name_lengths = {name: len(name) for name in names}
print(name_lengths) # {'Alice': 5, 'Bob': 3, 'Charlie': 7}
# 딕셔너리 필터링
scores = {"수학": 90, "영어": 65, "과학": 88, "국어": 72}
passed = {k: v for k, v in scores.items() if v >= 80}
print(passed) # {'수학': 90, '과학': 88}
집합 컴프리헨션
sentence = "hello world"
unique_chars = {ch for ch in sentence if ch != " "}
print(unique_chars) # {'h', 'e', 'l', 'o', 'w', 'r', 'd'}
중첩 컴프리헨션
matrix = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
flat = [num for row in matrix for num in row]
print(flat) # [1, 2, 3, 4, 5, 6, 7, 8, 9]
오늘의 연습문제
- 1~100에서 3과 5의 공배수만 컴프리헨션으로 추출하세요.
- 문자열 리스트에서 길이가 5 이상인 단어만 대문자로 변환한 리스트를 만드세요.
- 딕셔너리의 키와 값을 뒤집는 컴프리헨션을 작성하세요.