이름 없이 한 줄로 정의할 수 있는 익명 함수로, 다음과 같은 상황에서 유용하게 사용
lambda 입력값: 출력값
굳이 함수로 만들기에는 너무 짧고 단순한 연산을 빠르게 처리할 수 있음
# 제곱 계산 - 람다함수 사용
square = lambda x: x ** 2
print(square(5)) # 25
# 함수 사용
def square(x):
return x ** 2
print(square(5))
리스트의 각 요소를 변환할 때, 불필요한 함수 정의 없이 사용 가능
numbers = [1, 2, 3, 4, 5]
squared_numbers = list(map(lambda x: x ** 2, numbers)) # map(함수, 리스트)
print(squared_numbers) # [1, 4, 9, 16, 25]
map과 list는 짝꿍. 같이 써줘야 됨
여기서 map만 쓰면 메모리 주소 나옴
numbers = [1, 2, 3, 4, 5]
plus_numbers = list(map(lambda x: x + 100, numbers))
print(plus_numbers) # [101, 102, 103, 104, 105]
아래의 리스트의 요소들을 모두 문자형으로 변환한 str_numbers 리스트를 생성
numbers = [1, 2, 3, 4, 5]
str_numbers = list(map(lambda x: str(x), numbers))
print(str_numbers) # ['1', '2', '3', '4', '5']
특정 조건을 만족하는 요소만 필터링할 때 활용
numbers = [1, 2, 3, 4, 5]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # [2, 4]
아래의 리스트에서 3의 배수만 필터링하여 리스트를 만드시오
numbers = [10, 12, 15, 17, 18, 20, 21, 24, 25, 30]
multiples_of_three = list(filter(lambda x: x % 3 == 0, numbers))
print(multiples_of_three) # [12, 15, 18, 21, 24, 30]
sorted()에서 정렬 기준을 직접 지정할 수 있음
# 학생 리스트 생성
students = [("john", 90), ("jane", 85), ("Dave", 95)]
# 점수 낮은순으로 정렬
sorted(students, key=lambda x: x[1])
# [('jane', 85), ('john', 90), ('Dave', 95)]
# 점수 높은순으로 정렬
sorted(students, key=lambda x: x[1], reverse=True)
# [('Dave', 95), ('john', 90), ('jane', 85)]
아래의 학생 리스트에서 날짜를 기준으로 오름차순으로 정렬하는 코드를 작성하시오
students = [
("john", 90, "2024-03-10"),
("jane", 85, "2024-02-15"),
("Dave", 95, "2024-03-05"),
("Alice", 90, "2024-01-20"),
("Bob", 95, "2024-02-28"),
("Eve", 85, "2024-03-01")
]
result = sorted(students, key=lambda x: x[2])
print(result)
# [('Alice', 90, '2024-01-20'), ('jane', 85, '2024-02-15'), ('Bob', 95, '2024-02-28'), ('Eve', 85, '2024-03-01'), ('Dave', 95, '2024-03-05'), ('john', 90, '2024-03-10')]
굳이 별도로 정의할 필요 없이 즉석에서 정의하여 사용 가능
# 즉석에서 두 수의 합을 계산
print((lambda x, y: x + y)(3, 7)) # 10
map, filter, reduce 같은 함수형 프로그래밍 패턴에서 빠르고 깔끔한 코드 작성가능
from functools import reduce
numbers = [1, 2, 3, 4, 5]
# 모든 요소의 합
sum_numbers = reduce(lambda x,y: x+y, numbers)
print(sum_numbers) # 15
reduce는 반복문 없이 간결한 코드를 작성할 수 있어서 유용합니다. 누적 연산이 필요한 경우에 유용
아래의 리스트의 요소들을 모두 곱한 결과를 출력하시오
from functools import reduce
numbers = [4, 2, 6, 2, 3, 2]
gob_numbers = reduce(lambda x,y: x*y, numbers)
print(gob_numbers) # 576
def 함수로 변환하는 것이 가독성에 좋음# 좋은 예: 간단한 연산
df['doubled'] = df['value'].apply(lambda x: x * 2)
# 복잡한 로직은 일반 함수가 더 좋음
def complex_calculation(x):
if x < 0:
return 0
elif x < 10:
return x * 2
elif x < 100:
return x * 1.5
else:
return x
df['result'] = df['value'].apply(complex_calculation)
기존 함수(map, filter, sorted 등)와 함께 사용할 때 유용Pandas와 함께 사용할 때 그 진가를 발휘하며, 코드를 간결하고 효율적으로 만들어주는 강력한 도구