본문 바로가기

파이썬/사용법

[python] 파이썬 lambda를 활용하기

안녕하세요!

이번 글에서는 파이썬에서 lambda를 활용하는 방법에 대해서 알아보려고 합니다.

그 전에 lambda를 정의하는 방법을 잘 모르신다면 이 글을 참고해 주세요 

 

1) Lambda의 장점

2) map()

3) filter()

4) sorted()

 

순으로 알아보겠습니다.


1) Lambda의 장점

사실 람다는 함수와 똑같기 때문에

간단한 함수를 빠르게 만들어서 사용한다에 의의를 두어서 사용하시면 되겠습니다.

 

2) map()

아래와 같은 형식으로 사용합니다.

map(function object, iterable)

map의 동작 방식 : iterable한 객체에서 값 하나씩 가져와서 function 실행 후 리턴한다.

리턴 타입은 map 객체를 반환한다.

 

2-1) 1부터 10까지 제곱수 리스트 만드는 예시

print(map(lambda x : x ** 2,[1,2,3,4,5,6,7,8,9,10]))
# <map object at 0x000001F102C2B8B0>
print(list(map(lambda x : x ** 2,[1,2,3,4,5,6,7,8,9,10])))
# [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

map 객체를 반환 받아서 print 하려고하면 저렇게 리턴하는데 왜 저렇게 리턴하는 지는 아직 잘 모르겠습니다.

그래서 리스트로 씌워서 리스트로 반환하여 보는 편입니다.

 

map 동작 방식 짧게 정리 하겠습니다.

가져와서 실행리턴합니다.

 

 

3) filter()

아래와 같은 형식으로 사용합니다.

filter(function obejct, iterable)

filter의 동작 방식 : iterable한 객체에서 값 하나씩 가져와서 function 실행 후 참이면 리턴한다.

리턴 타입은 filter객체를 반환한다.

 

3-1) 특정 범위에서 음수만 모아놓은 리스트 만들기 예시

print(list(range(-10,10)))
print(filter(lambda x: x < 0,range(-10,10)))
print(list(filter(lambda x: x < 0,range(-10,10))))

# [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
# <filter object at 0x000001DE4934B970>
# [-10, -9, -8, -7, -6, -5, -4, -3, -2, -1]

-10~10 범위 자료형들 가져와서 x < 0 보다 작으면 모아 놓고 리스트로 씌워서 보여드렸습니다.

 

 

filter 동작 방식 짧게 정리 하겠습니다.

가져와서 실행 후 참이면 리턴합니다.

 

4) sorted()

아래와 같은 형식으로 사용합니다.

sorted(iterable, key=None, reverse=False)

iterable한 객체에서 값 하나씩 가져와서 key의 인자인 function 실행 후

reverse 의 인자에 따라 내림차순,오름차순 결정해서 정렬하는 함수입니다.

 

4-1)딕셔너리의 나이를 기준으로 오름차순 정렬 하는 예시

students = [
    {"name": "Alice", "age": 25},
    {"name": "bbb", "age": 20},
    {"name": "Charlie", "age": 30},
    {"name": "Bob", "age": 25},
]

# 나이를 기준으로 오름차순 정렬
students_sorted_by_age = sorted(students, key=lambda x: x["age"])
for data in students_sorted_by_age:
    print(data)

# {'name': 'bbb', 'age': 20}
# {'name': 'Alice', 'age': 25}
# {'name': 'Bob', 'age': 25}
# {'name': 'Charlie', 'age': 30}

리스트[딕셔너리1, 딕셔너리2, 딕셔너리3, 딕셔너리4] 형태

stundent 하나씩 가져와서 딕셔너리1의 key인 age의 value를 기준으로 정렬

 

 

4-2)딕셔너리의 이름을 기준으로 내림차순 정렬 하는 예시

students = [
    {"name": "Alice", "age": 25},
    {"name": "bbb", "age": 20},
    {"name": "Charlie", "age": 30},
    {"name": "Bob", "age": 25},
]

students_sorted_by_name = sorted(students, key=lambda x: x["name"], reverse=True)
for data in students_sorted_by_name:
    print(data)

# {'name': 'bbb', 'age': 20}
# {'name': 'Charlie', 'age': 30}
# {'name': 'Bob', 'age': 25}
# {'name': 'Alice', 'age': 25}

리스트[딕셔너리1, 딕셔너리2, 딕셔너리3, 딕셔너리4] 형태

stundent 하나씩 가져와서 딕셔너리1의 key인 name의 value를 기준으로 정렬

reverse = True # 내림차순으로 정렬

 

 

 

4-3) 딕셔너리 정렬 후 딕셔너리로 변환하기

data = {
    "Alice": 25,
    "Bob": 20,
    "Charlie": 22,
    "David": 18
}


sorted_data_by_name = dict(sorted(data.items(),key = lambda x:x[0],reverse=False) )
print(sorted_data_by_name)
# {'Alice': 25, 'Bob': 20, 'Charlie': 22, 'David': 18}

1) data.items() 튜플로 가져온다.

2) 튜플의 0번째를 기준으로 정렬

3) 아직까지 리스트 안의 튜플인 상태

4) dict로 변환한다.

 

sorted 동작 방식 짧게 정리 하겠습니다.

가져와서 실행 후 key에 따라 정렬, reverse의 값에 따라 오름차순 내림차순 결정합니다.

 


정리)

iterable 한 데이터를 다룰 때 활용하는 map,filter ,sorted 함수들을 lambda 와 결합해서 활용하는 방식을 정리했다.

3개다 함수를 인자로 받을 수 있는 함수기에 사용을 할 수 있었다.

lambda는 함수를 인자로 받을 수 있는 모든 곳에 활용할 수 있다.

짧게 짧게 사용하여 간결하게 코드를 작성해보자

마치면서)

파이썬 lambda로 예제를 찾아보시면 더욱 자세한 정보를 얻을 수 있습니다. 

다음 글에서도 유용한 파이썬 팁과 기능을 소개하도록 하겠습니다

감사합니다.