donut

파이썬 함수 lambda(람다)

Function

 

 

 

 

lambda

 

이번 기록은 lambda와 이를 활용한 함수에 관한 내용입니다.
람다? 람다란 함수를 한줄로 표현하기위한 형식이라고 보면 되겠습니다.

리스트 컴프리헨션에서 for문을 한줄로 표현을 했었죠 ?
람다도 이와 비슷한 면모가 있습니다.

 

일반 함수

In [3]:
def test1(x,y):
    return x+y

test1(100,300)
Out[3]:
400
 

lambda

In [4]:
(lambda x, y : x+y)(100,300)
Out[4]:
400
 

람다를 사용한게 더 복잡한거같은데..ㅎ 람다식을 한번 볼까요?

lambda식

 

(lambda 인자 : 표현식)(인자값)

 

익숙하지않아 어려운 이 람다식은 고급 함수를 사용하는데 용이합니다. 어떤 함수와 함께 쓰이는지 보겠습니다.

 

lambda + map

 

map 함수는 다음과 같이 작성합니다
map(함수 +,리스트)

람다와 함께 사용하면 다음과 같이 되겠죠 ?
map(lambda(인자 :표현식,리스트)

lambda + map_예시

In [15]:
test_list1 = [0,1,2,3,4,5]
list(map(lambda x : x *3, test_list1))
Out[15]:
[0, 3, 6, 9, 12, 15]
 

map은 리스트에서 각 원소값들에게 함수를 적용시킨 후의 값들을 리스트에 하나씩 담아주는 함수입니다.

lambda + map_예시2

In [19]:
list(map(lambda x ,y : x+y , range(5),range(5,10)))
Out[19]:
[5, 7, 9, 11, 13]
In [20]:
list(map(lambda x ,y : x+y , range(4),range(5,10)))
Out[20]:
[5, 7, 9, 11]
In [21]:
list(map(lambda x ,y : x+y , range(5),range(5,9)))
Out[21]:
[5, 7, 9, 11]
In [33]:
print(list(range(5)))
print(list(range(5,10)))
 
[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
 

이해가 되셨나요 ?
map함수는 복수개의 리스트와 인자값으로도 사용 가능하고, 주어진 리스트 중 최소길이만큼의 값을 돌려줍니다.

 

lambda + reduce

다음은reduce함수와 람다가 함께 쓰이는 경우를 살펴 보겠습니다.
우선 reduce에 대해 파악해 보겠습니다.

reduce(함수, 순서형자료)입니다.
순서형 자료는 (튜플 / 문자열 / 리스트)형식의 자료를 말합니다.

lambda +reduce_예시

In [53]:
from functools import reduce
test_list2 = [0,1,2,3,4,5]
reduce(lambda x,y : x + y, test_list1)
Out[53]:
15
 

reduce는 쉽게말하면 누적합을 하는 함수입니다.
리스트에 있는 모든 값들을 더해 15라는 값이 나왔습니다.

lambda +reduce_예시2

In [54]:
test_list3 = [0,1,2,3,4,5]
reduce(lambda x,y : x + 2*y, test_list2)
Out[54]:
30
 

[0+2 1] + [2 2] + [2 3] + [2 4] + [2 * 5]
2 + 4 + 6 + 8 + 10 = 30

In [56]:
reduce(lambda x,y : 2*x + y, range(6))
Out[56]:
57
 

[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

 

reduce함수 조금만 응용이 들어가면 금새 어려운 함수로 돌변합니다

lambda + filter

이번엔 filter함수를 살펴보겠습니다.

 

필터 함수도 map과 reduce와 같은 형식입니다.

In [62]:
test_list4 = [0,1,2,3,4,5]
list(filter(lambda x : x >2 , test_list4))
Out[62]:
[3, 4, 5]
 

리스트에서 2보다 큰 값들을 새로운 리스트로 출력이 되었죠 ?
이처럼 filter는 함수식을 만족하는 리스트를 만들어줍니다.
만족 한다 == 함수식이 참인경우 입니다.

lambda + filter_ 예시2

In [66]:
test_list5 = [0,1,2,3,4,5,6,7,8,9,10]
list(filter(lambda x : x >5 , test_list5))
Out[66]:
[6, 7, 8, 9, 10]
In [83]:
list(filter(lambda x : x % 2 != 0 , range(11)))
Out[83]:
[1, 3, 5, 7, 9]
In [81]:
list(filter(lambda x : x % 2 == 0   , range(11)))
Out[81]:
[0, 2, 4, 6, 8, 10]
In [84]:
list(filter(lambda x : x % 2 == 0 and x > 5  , range(11)))
Out[84]:
[6, 8, 10]
In [85]:
list(filter(lambda x : x % 2 == 0 or x > 5  , range(11)))
Out[85]:
[0, 2, 4, 6, 7, 8, 9, 10]
 

필터는 더 다양한 경우를 표현해 보았습니다.
리스트에서 조건에(함수에) 만족하는 값들을 리스트로 반환해줍니다.

이렇게 오늘은 파이썬 람다 함수에 대해서 알아보았습니다.
함께 활용하는 map, reduce, filter와 함께 사용할때
강력한 능력을 발휘.... 아니 아주 고급진 함수로 변하는 람다였습니다.

In [ ]:
 

'Function' 카테고리의 다른 글

파이썬 Collections  (0) 2020.07.09
파이썬 Enumerate & zip  (0) 2020.07.08
파이썬 스플릿 & 조인  (0) 2020.07.07
리스트 컴프리헨션  (0) 2020.07.05