1. filter — 조건에 맞는 값만 추출
filter(func, iterable)은 조건을 만족하는 값만 남기는 함수입니다.
func(x)가 True일 때만 요소가 유지됩니다.
# 짝수만 추출
nums = [1, 2, 3, 4, 5, 6]
evens = list(filter(lambda x: x % 2 == 0, nums))
# [2, 4, 6]
2. map — 모든 요소에 함수 적용
map(func, iterable)은 각 요소에 동일한 함수를 적용한 결과를 반환합니다.
# 각 숫자를 제곱으로 변환
nums = [1, 2, 3, 4]
squares = list(map(lambda x: x * x, nums))
# [1, 4, 9, 16]
3. list, filter, map 함께 쓰기
예시 시나리오
점수 리스트가 있고, 음수는 제거, 100점을 넘으면 100으로 처리, 70점 이상은 1.2배 보정하되 최대 100점으로 제한한다고 해봅시다.
scores = [95, 67, -3, 88, 120, 70, 0, 101]
# 1) 음수 제거
valid = filter(lambda s: s >= 0, scores)
# 2) 상한값 100으로 제한
clipped = map(lambda s: 100 if s > 100 else s, valid)
# 3) 70점 이상은 1.2배 보정, 단 최대 100
adjusted = map(
lambda s: min(100, int(round(s * 1.2))) if s >= 70 else s,
clipped
)
result = list(adjusted)
print(result)
# [100, 67, 100, 100, 84, 0, 100]
한 줄로 쓰기 (파이프라인 스타일)
def adjust_scores(scores):
return list(
map(
lambda s: min(100, int(round(s * 1.2))) if s >= 70 else s,
map(
lambda s: 100 if s > 100 else s,
filter(lambda s: s >= 0, scores)
)
)
)
print(adjust_scores([95, 67, -3, 88, 120, 70, 0, 101]))
4. 리스트 컴프리헨션으로도 가능
파이썬에서는 간단한 변환/필터링은 리스트 컴프리헨션으로 더 읽기 쉽게 쓸 수 있습니다.
scores = [95, 67, -3, 88, 120, 70, 0, 101]
adjusted = [
(min(100, int(round(s * 1.2))) if s >= 70 else s)
for s in (min(100, s) for s in scores if s >= 0)
]
정리하면
- list() : 결과를 리스트로 변환
- filter() : 조건에 맞는 값만 추출
- map() : 모든 요소에 함수를 적용
- map과 filter를 함께 쓰면 강력하지만, 복잡한 경우 리스트 컴프리헨션이 가독성이 더 좋음
'파이썬 > 기초 프로그래밍' 카테고리의 다른 글
| 파이썬의 시퀀스형(Sequence) (0) | 2025.09.07 |
|---|---|
| 파이썬 리스트 곱하기(*)와 참조 공유 문제 (0) | 2025.09.07 |
| 파이썬 NamedTuple 간단 정리 (0) | 2025.09.06 |
| 파이썬 데이터 모델링: 매직 메서드로 객체를 데이터처럼 다루기 (0) | 2025.09.06 |
| 파이썬에서 *args와 시퀀스 언패킹의 차이 이해하기 (0) | 2025.09.06 |