파이썬 함수 lambda(람다)
Function
lambda¶
이번 기록은 lambda와 이를 활용한 함수에 관한 내용입니다.
람다? 람다란 함수를 한줄로 표현하기위한 형식이라고 보면 되겠습니다.
리스트 컴프리헨션에서 for문을 한줄로 표현을 했었죠 ?
람다도 이와 비슷한 면모가 있습니다.
일반 함수¶
def test1(x,y):
return x+y
test1(100,300)
lambda¶
(lambda x, y : x+y)(100,300)
람다를 사용한게 더 복잡한거같은데..ㅎ 람다식을 한번 볼까요?
lambda식¶
(lambda 인자 : 표현식)(인자값)
익숙하지않아 어려운 이 람다식은 고급 함수를 사용하는데 용이합니다. 어떤 함수와 함께 쓰이는지 보겠습니다.
lambda + map¶
test_list1 = [0,1,2,3,4,5]
list(map(lambda x : x *3, test_list1))
map은 리스트에서 각 원소값들에게 함수를 적용시킨 후의 값들을 리스트에 하나씩 담아주는 함수입니다.
lambda + map_예시2¶
list(map(lambda x ,y : x+y , range(5),range(5,10)))
list(map(lambda x ,y : x+y , range(4),range(5,10)))
list(map(lambda x ,y : x+y , range(5),range(5,9)))
print(list(range(5)))
print(list(range(5,10)))
이해가 되셨나요 ?
map함수는 복수개의 리스트와 인자값으로도 사용 가능하고, 주어진 리스트 중 최소길이만큼의 값을 돌려줍니다.
from functools import reduce
test_list2 = [0,1,2,3,4,5]
reduce(lambda x,y : x + y, test_list1)
reduce는 쉽게말하면 누적합을 하는 함수입니다.
리스트에 있는 모든 값들을 더해 15라는 값이 나왔습니다.
lambda +reduce_예시2¶
test_list3 = [0,1,2,3,4,5]
reduce(lambda x,y : x + 2*y, test_list2)
[0+2 1] + [2 2] + [2 3] + [2 4] + [2 * 5]
2 + 4 + 6 + 8 + 10 = 30
reduce(lambda x,y : 2*x + y, range(6))
[2 [2 [2 [2 [2 0+1] + 2] + 3] + 4] + 5]
2 0 + 1 + = 1
2 1 + 2 = 4
2 4 + 3 = 11
2 11 + 4 = 26
2 26 + 5 = 57
필터 함수도 map과 reduce와 같은 형식입니다.
test_list4 = [0,1,2,3,4,5]
list(filter(lambda x : x >2 , test_list4))
리스트에서 2보다 큰 값들을 새로운 리스트로 출력이 되었죠 ?
이처럼 filter는 함수식을 만족하는 리스트를 만들어줍니다.
만족 한다 == 함수식이 참인경우 입니다.
lambda + filter_ 예시2¶
test_list5 = [0,1,2,3,4,5,6,7,8,9,10]
list(filter(lambda x : x >5 , test_list5))
list(filter(lambda x : x % 2 != 0 , range(11)))
list(filter(lambda x : x % 2 == 0 , range(11)))
list(filter(lambda x : x % 2 == 0 and x > 5 , range(11)))
list(filter(lambda x : x % 2 == 0 or x > 5 , range(11)))
필터는 더 다양한 경우를 표현해 보았습니다.
리스트에서 조건에(함수에) 만족하는 값들을 리스트로 반환해줍니다.
이렇게 오늘은 파이썬 람다 함수에 대해서 알아보았습니다.
함께 활용하는 map, reduce, filter와 함께 사용할때
강력한 능력을 발휘.... 아니 아주 고급진 함수로 변하는 람다였습니다.
'Function' 카테고리의 다른 글
파이썬 Collections (0) | 2020.07.09 |
---|---|
파이썬 Enumerate & zip (0) | 2020.07.08 |
파이썬 스플릿 & 조인 (0) | 2020.07.07 |
리스트 컴프리헨션 (0) | 2020.07.05 |