lambda 실전문제 20개
(상세 설명 포함)

파이썬 lambda 문법을 기초 → 응용 → 고급 순서로 익힐 수 있도록 정리한 학습용 HTML 자료입니다.

각 문제마다 코드, 실행 결과, 왜 그런 결과가 나오는지를 함께 넣었습니다.

학습 포인트

lambda는 이름 없이 한 줄로 만드는 짧은 함수입니다.

기본형: lambda 입력값: 결과식 map + lambda = 값 변환 filter + lambda = 조건 선택 즉시 실행 가능

🟢 기초 문제 1 ~ 7

① 각 원소에 1 더하기
list(map(lambda x: x + 1, [1, 2, 3]))
결과: [2, 3, 4]
리스트의 각 원소가 차례대로 x에 들어갑니다. lambda x: x + 1 이므로 1→2, 2→3, 3→4가 되어 새로운 리스트가 만들어집니다.
② 짝수만 고르기
list(filter(lambda x: x % 2 == 0, range(1, 6)))
결과: [2, 4]
range(1, 6)은 1, 2, 3, 4, 5를 만듭니다. 그중에서 x % 2 == 0이 참인 값만 남기므로 짝수 2와 4만 선택됩니다.
③ 즉시 실행 함수
(lambda x: x * 2)(5)
결과: 10
먼저 lambda x: x * 2라는 익명 함수를 만든 뒤, 바로 뒤의 (5)로 즉시 실행합니다. 따라서 5×2=10이 됩니다.
④ 제곱 만들기
list(map(lambda x: x * x, [1, 2, 3]))
결과: [1, 4, 9]
각 원소를 자기 자신과 곱합니다. 1², 2², 3²를 계산하므로 결과는 [1, 4, 9]입니다.
⑤ 두 리스트 같은 위치끼리 더하기
list(map(lambda a, b: a + b, [1, 2, 3], [4, 5, 6]))
결과: [5, 7, 9]
첫 번째 리스트와 두 번째 리스트에서 같은 위치의 값을 하나씩 꺼내 더합니다. 1+4, 2+5, 3+6을 계산합니다.
⑥ 3보다 큰 값만 선택
list(filter(lambda x: x > 3, [1, 2, 3, 4, 5]))
결과: [4, 5]
조건식 x > 3을 만족하는 원소만 남깁니다. 1, 2, 3은 제거되고 4와 5만 남습니다.
⑦ 숫자를 문자열로 바꾸기
list(map(lambda x: str(x), [1, 2, 3]))
결과: ['1', '2', '3']
str(x)는 숫자를 문자열로 바꾸는 함수입니다. 따라서 정수 1, 2, 3이 문자 '1', '2', '3'으로 변환됩니다.

🟡 응용 문제 8 ~ 14

⑧ 홀수만 유지하고 짝수는 0으로 바꾸기
list(map(lambda x: x if x % 2 else 0, range(5)))
결과: [0, 1, 0, 3, 0]
range(5)는 0, 1, 2, 3, 4입니다. 조건식에서 홀수면 자기 자신을, 짝수면 0을 반환하므로 결과가 [0, 1, 0, 3, 0]이 됩니다.
⑨ 길이가 3보다 긴 문자열만 선택
list(filter(lambda x: len(x) > 3, ['hi', 'hello', 'hey']))
결과: ['hello']
len(x)는 문자열 길이를 구합니다. 'hi'는 2, 'hello'는 5, 'hey'는 3이므로 3보다 큰 'hello'만 남습니다.
⑩ 각 문자열의 첫 글자 추출
list(map(lambda x: x[0], ['apple', 'banana', 'cherry']))
결과: ['a', 'b', 'c']
x[0]은 문자열의 첫 번째 문자를 뜻합니다. 각 단어의 첫 글자만 꺼내므로 a, b, c가 됩니다.
⑪ 소문자를 대문자로 바꾸기
list(map(lambda x: x.upper(), ['a', 'b', 'c']))
결과: ['A', 'B', 'C']
upper()는 문자열을 대문자로 바꿉니다. 따라서 각 원소가 A, B, C로 변환됩니다.
⑫ 문자열 반복하기
list(map(lambda x: x * 3, ['a', 'b']))
결과: ['aaa', 'bbb']
문자열에 정수를 곱하면 반복됩니다. 'a' * 3은 'aaa', 'b' * 3은 'bbb'가 됩니다.
⑬ a로 시작하는 단어만 선택
list(filter(lambda x: x.startswith('a'), ['apple', 'banana', 'avocado']))
결과: ['apple', 'avocado']
startswith('a')는 문자열이 a로 시작하는지 확인합니다. apple과 avocado만 조건을 만족합니다.
⑭ 두 리스트 같은 위치끼리 곱하기
list(map(lambda a, b: a * b, [1, 2, 3], [4, 5, 6]))
결과: [4, 10, 18]
각 위치의 값을 곱합니다. 1×4, 2×5, 3×6이므로 차례대로 4, 10, 18이 됩니다.

🔴 고급 문제 15 ~ 20

⑮ 문자열 뒤집기
list(map(lambda x: x[::-1], ['abc', 'def']))
결과: ['cba', 'fed']
x[::-1]은 처음부터 끝까지 거꾸로 가져오는 슬라이싱입니다. 그래서 'abc'는 'cba', 'def'는 'fed'가 됩니다.
⑯ 3의 배수만 선택
list(filter(lambda x: x % 3 == 0, range(10)))
결과: [0, 3, 6, 9]
range(10)은 0부터 9까지입니다. 이 중 3으로 나누어 떨어지는 값만 남기면 0, 3, 6, 9가 됩니다.
⑰ 튜플의 두 번째 값만 모으기
list(map(lambda x: x[1], [(1, 2), (3, 4), (5, 6)]))
결과: [2, 4, 6]
각 튜플에서 인덱스 1의 값을 꺼냅니다. (1,2)에서는 2, (3,4)에서는 4, (5,6)에서는 6을 가져옵니다.
⑱ 홀수는 1 더하고 짝수는 1 빼기
list(map(lambda x: x + 1 if x % 2 else x - 1, range(5)))
결과: [-1, 2, 1, 4, 3]
0, 1, 2, 3, 4에 대해 짝수면 1을 빼고 홀수면 1을 더합니다. 그래서 0→-1, 1→2, 2→1, 3→4, 4→3이 됩니다.
⑲ 문자열을 공백 기준으로 나누기
list(map(lambda x: x.split(), ['a b', 'c d']))
결과: [['a', 'b'], ['c', 'd']]
split()은 공백을 기준으로 문자열을 나눕니다. 따라서 'a b'는 ['a', 'b'], 'c d'는 ['c', 'd']가 됩니다.
⑳ 원소의 합이 5보다 큰 튜플만 선택
list(filter(lambda x: sum(x) > 5, [(1, 2), (3, 4), (2, 2)]))
결과: [(3, 4)]
sum(x)는 튜플 원소의 합입니다. (1,2)의 합은 3, (3,4)의 합은 7, (2,2)의 합은 4이므로 5보다 큰 (3,4)만 남습니다.

핵심 정리