lambda란?
lambda 함수는 간결한 함수 정의와 활용에 유용한 기능 중 하나입니다.
이 글에서는 lambda 함수가 무엇이고 어떻게 활용할 수 있는지 자세히 알아보겠습니다.
목차
1. lambda 함수란 무엇인가요?
- lambda 함수의 정의
- lambda 함수와 일반 함수의 차이점
2. lambda 함수의 기본 문법
- lambda 함수의 형태
- 인자와 반환값
3. lambda 함수의 활용 예시
- 간단한 수학 연산
- map()과 filter()와 함께 사용하기
- 정렬 기준 지정에 활용하기
4. lambda 함수의 장점과 한계
- 간결성과 가독성
- 복잡한 로직에는 어울리지 않을 때
5. 실제 예시와 함께 알아보기
- 리스트 조작 예시
- 정렬 및 필터링 예시
- 데이터 처리 예시
1. lambda 함수란 무엇인가요?
lambda 함수는 파이썬에서 익명 함수를 정의하는 방법 중 하나입니다.
일반적인 함수와 비슷하지만, 한 줄로 간단하게 정의되며 이름이 없습니다.
lambda 함수는 주로 간단한 작업에 사용되며, 다른 함수의 인자로 전달하거나 필요한 곳에서 바로 사용할 수 있습니다.
2. lambda 함수의 기본 문법
lambda 함수의 기본 문법은 다음과 같습니다.
lambda 인자: 표현식
여기서 "인자"는 함수의 입력 값이고, "표현식"은 입력 값을 가지고 연산한 결과를 나타냅니다.
예를 들어, 두 개의 숫자를 더하는 lambda 함수는 다음과 같이 정의할 수 있습니다.
add = lambda x, y: x + y
3. lambda 함수의 활용 예시
간단한 수학 연산
add = lambda x, y: x + y
result = add(3, 5) # 결과: 8
map( )과 filter( )와 함께 사용하기
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers)) # [1, 4, 9, 16, 25]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) # [2, 4]
정렬 기준 지정에 활용하기
points = [(1, 3), (2, 1), (0, 5), (4, 2)]
sorted_points = sorted(points, key=lambda point: point[1]) # [(2, 1), (4, 2), (1, 3), (0, 5)]
4. lambda 함수의 장점과 한계
간결성과 가독성
lambda 함수는 간결한 함수 정의를 가능하게 합니다.
이것은 코드를 더 간결하게 만들 수 있는데, 특히 간단한 연산이나 단일 표현식을 갖는 함수를 작성할 때 유용합니다.
아래는 간결성과 가독성에 관한 예시입니다.
# 일반 함수 정의
def add(x, y):
return x + y
# 일반 함수를 사용하여 두 숫자 더하기
result = add(3, 5)
print(result) # 출력: 8
# lambda 함수 사용
add_lambda = lambda x, y: x + y
# lambda 함수를 사용하여 두 숫자 더하기
result_lambda = add_lambda(3, 5)
print(result_lambda) # 출력: 8
위의 코드에서 복잡한 조건을 갖는 lambda 함순느 가독성이 낮아집니다. 이런 경우에는 일반 함수정의를 사용하여 코드의 가독성을 높일 수 있습니다.
따라서, lambda 함수의 활용은 간단하고 직관적인 작업에 적합하며, 복잡한 로직을 다루기 위해서는 일반 함수를 사용하는 것이 바람직 합니다.
복잡한 로직에는 어울리지 않을 때
# 복잡한 조건을 갖는 lambda 함수
is_valid = lambda x, y: (x > 0 and y > 0) or (x < 0 and y < 0)
# 위의 lambda 함수를 이해하기 어려운 경우
# 일반 함수 정의를 사용하여 가독성 향상
def is_valid(x, y):
return (x > 0 and y > 0) or (x < 0 and y < 0)
5. 실제 예시와 함께 알아보기
리스트 조작 예시
리스트 조작에서 lambda 함수는 리스트의 요소를 변형하거나 특정 조건에 따라 요소를 선택하는 데 유용하게 사용될 수 있습니다. 아래는 몇 가지 리스트 조작 예시입니다.
1. 요소 변형
map() 함수와 함께 lambda 함수를 사용하여 리스트의 모든 요소를 변형할 수 있습니다.
예를 들어, 다음과 같이 숫자 리스트의 각 요소를 제곱하는 코드를 작성할 수 있습니다
numbers = [1, 2, 3, 4, 5]
squared = list(map(lambda x: x**2, numbers))
print(squared) # 출력: [1, 4, 9, 16, 25]
2. 리스트의 최댓값/최솟값 찾기
max()와 min() 함수를 사용하여 lambda 함수를 통해 리스트에서 최댓값과 최솟값을 찾을 수 있습니다.
예를 들어, 다음 코드는 리스트에서 최댓값을 찾는데 lambda 함수를 사용합니다.
numbers = [10, 3, 8, 1, 7]
max_value = max(numbers, key=lambda x: x)
print(max_value) # 출력: 10
정렬 및 필터링 예시
1. 정렬 기준 지정
sorted() 함수를 사용하여 lambda 함수를 통해 리스트를 특정 기준으로 정렬할 수 있습니다.
예를 들어, 아래 코드는 리스트를 문자열 길이에 따라 정렬합니다
fruits = ["apple", "banana", "cherry", "date", "elderberry"]
sorted_fruits = sorted(fruits, key=lambda x: len(x))
print(sorted_fruits) # 출력: ['date', 'apple', 'banana', 'cherry', 'elderberry']
lambda 함수를 사용한 다양한 정렬 예제를 설명해보겠습니다
lambda 함수를 활용하여 원하는 정렬 순서로 데이터를 정렬할 수 있습니다.
아래 예제에서는 리스트를 정렬하는 데 key 매개변수에 lambda 함수를 활용하는 방법을 다룹니다.
1) 튜플 리스트의 특정 요소를 기준으로 정렬
student_grades = [("Alice", 90), ("Bob", 75), ("Charlie", 85)]
# 성적에 따라 내림차순 정렬
sorted_grades = sorted(student_grades, key=lambda x: x[1], reverse=True)
print(sorted_grades)
# 출력: [('Alice', 90), ('Charlie', 85), ('Bob', 75)]
이 예제에서는 학생 이름과 점수로 이루어진 튜플 리스트를 점수에 따라 내림차순으로 정렬하고 있습니다.
key 매개변수에 전달된 lambda 함수는 각 튜플의 두 번째 요소(점수)를 반환하고,
reverse=True를 사용하여 내림차순으로 정렬합니다.
2) 사용자 정의 객체의 속성을 기준으로 정렬
class Person:
def __init__(self, name, age):
self.name = name
self.age = age
people = [Person("Alice", 30), Person("Bob", 25), Person("Charlie", 35)]
# 나이에 따라 오름차순 정렬
sorted_people = sorted(people, key=lambda person: person.age)
for person in sorted_people:
print(person.name, person.age)
# 출력:
# Bob 25
# Alice 30
# Charlie 35
이 예제에서는 Person 클래스의 인스턴스를 나이에 따라 오름차순으로 정렬하고 있습니다.
key 매개변수에 전달된 lambda 함수는 각 객체의 age 속성을 반환하고, 이를 기준으로 정렬합니다.
3) 여러 기준을 사용한 복합 정렬(1)
# 방 정보가 담긴 리스트 rooms
rooms = [(101, 150), (102, 120), (103, 150), (104, 110), (105, 130)]
# 방 정보를 정렬: 가격(x[1])을 오름차순으로 정렬하고, 가격이 같으면 방 번호(x[0])를 오름차순으로 정렬
rooms.sort(key=lambda x: (x[1], x[0]))
# 정렬된 방 정보 출력
for room in rooms:
print(f"방 번호: {room[0]}, 가격: {room[1]}")
```
방 번호: 104, 가격: 110
방 번호: 102, 가격: 120
방 번호: 105, 가격: 130
방 번호: 101, 가격: 150
방 번호: 103, 가격: 150
```
이 코드는 방 정보가 담긴 리스트인 rooms 를 정렬합니다.
정렬은 먼저 두 번째 요소(x[1], 방의 가격)를 기준으로 오름차순으로 정렬하고,
가격이 같은 경우에는 첫 번째 요소(x[0], 방의 번호)를 기준으로 정렬합니다.
위의 결과에서 볼 수 있듯이, rooms 리스트는 가격을 오름차순으로 정렬하고,
가격이 같은 경우에는 방 번호를 오름차순으로 정렬하여 출력됩니다.
이렇게 lambda 함수를 사용하여 복수의 기준으로 리스트를 정렬할 수 있습니다.
4) 여러 기준을 사용한 복합 정렬(2)
employees = [
{"name": "Alice", "salary": 60000, "experience": 3},
{"name": "Bob", "salary": 75000, "experience": 5},
{"name": "Charlie", "salary": 55000, "experience": 4}
]
# 경력 높은 순으로 정렬하고, 같은 경력이면 연봉 높은 순으로 정렬
sorted_employees = sorted(employees, key=lambda x: (-x["experience"], -x["salary"]))
for employee in sorted_employees:
print(employee)
# 출력:
# {'name': 'Bob', 'salary': 75000, 'experience': 5}
# {'name': 'Charlie', 'salary': 55000, 'experience': 4}
# {'name': 'Alice', 'salary': 60000, 'experience': 3}
이 예제에서는 여러 기준을 사용한 복합 정렬을 수행하고 있습니다.
먼저 경력(experience)을 내림차순으로 정렬하고, 경력이 같은 경우에는 연봉(salary)을 내림차순으로 정렬합니다.
lambda 함수에서 `-`를 사용하여 내림차순 정렬을 표현하였습니다.
이러한 예제를 통해 lambda 함수를 활용하여 다양한 정렬 상황에서 원하는 정렬 순서를 지정할 수 있음을 알 수 있습니다.
2. 조건에 맞는 요소 필터링
filter() 함수와 lambda 함수를 함께 사용하여 리스트에서 조건에 맞는 요소만 필터링할 수 있습니다.
예를 들어, 다음 코드는 리스트에서 짝수만 필터링합니다
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9]
even_numbers = list(filter(lambda x: x % 2 == 0, numbers))
print(even_numbers) # 출력: [2, 4, 6, 8]
3. 데이터 처리 예시
lambda 함수는 데이터 처리 작업에서도 유용하게 사용될 수 있습니다.
예를 들어, CSV 파일을 읽어오고 각 행을 처리하는 작업을 `lambda` 함수를 통해 수행할 수 있습니다.
데이터 처리 작업에 대한 예시는 다소 복잡할 수 있으므로 이 부분에서는 더 구체적인 예시를 들지는 않겠습니다.
'개발 > Python' 카테고리의 다른 글
[자료구조] A* 알고리즘 (1) | 2024.01.30 |
---|---|
[Python] 구글 뉴스 크롤링하기 (2) | 2024.01.04 |
[Python] 윈도우 venv 가상환경 설치하기 (1) | 2023.01.25 |
[Python] venv 가상환경 설정이 필요한 이유는? (0) | 2023.01.25 |