[Python] Lambda & MapReduce

미남로그·2021년 12월 29일
0

파이썬 기초 공사 ing ... 😆


Lambda

Lambda는 함수 이름 없이, 함수처럼 쓸 수 있는 익명 함수입니다.

파이썬의 경우, 파이썬에 있는 내장 함수의 종류가 굉장히 많죠!

하지만 본인만의 함수를 만들어주고 싶을 때 def를 사용해 함수를 정의해줘야 했습니다.

하지만 lambda를 사용할 경우 익명의 함수를 빠르게 사용이 가능합니다.

수학의 람다 대수에서 유래했다는데 관심 없습니다...

코드로 살펴 봅시다~

General function

def f(x,y):
	return x+y
print(f(1,4))

Out:
5

f(x,y) 함수는 x+y의 값을 return 해줍니다. 그래서 매개변수 1, 4가 들어갔을 경우 5가 출력됩니다.

Lambda function

f = lambda x, y: x+y
print(f(1,4))

Out:
5

위의 코드와 동일한 함수를 lambda를 이용해 만들었습니다.

lambda x: 이렇게 해준 다음 보통 뒤에 식을 이용하여 만드는 것 같습니다.


Map & Reduce

Map function

Sequence 자료형 각 element에 동일한 function을 적용한다.

Sequence 자료형이란 각 객체에 순서를 갖고 있는 자료 구조를 의미한다. 예를 들어, 리스트, 튜플, 문자열 등이 있다.

ex = [1,2,3,4,5]

f = lambda x: x ** 2
print(list(map(f, ex)))

f = lambda x, y : x + y
print(list(map(f, ex, ex)))

Out:
[1, 4, 9, 16, 25][2, 4, 6, 8, 10]

ex 리스트에 거듭제곱을 한 값과, ex 리스트와 ex 리스트를 각각 합한 값이 출력되었다.

map에는

map(function_name, list_data)의 형식으로 들어갈 수 있다.

그래서 lambda로 만들어준 익명의 함수 f를 넣고 뒤에 리스트 ex를 적용시켰을 때, 함수 f에 맞게 계산된 값이 출력되는 것을 확인할 수 있다.

두 개 이상의 list에도 적용 가능하다.
if filter도 사용 가능하다.

ex = [1,2,3,4,5]

f = lambda x, y : x + y
print(list(map(f, ex, ex)))

print(list(
    map(
        lambda x: x ** 2 if x % 2 == 0
        else x,
        ex
    )
)
    
)

Out:
[2, 4, 6, 8, 10]

[1, 4, 3, 16, 5]

일부러 코드를 해석하기 편하게 enter를 넣어서 코드를 작성한 것 같다.

list, map이 있고 그 안에

lambda x: ... 함수가 있고 if filtering이 되어 있고 조건을 만족하지 않을 경우(else) x를 그대로 반환하라고 적어주었다.

lambda의 경우 filter를 적용할 때, 조건을 만족하지 않을 때의 else도 꼭 넣어줘야 한다고 한다.

각각 sequence의 값이 어떻게 반환되는지 보여주어야 한다.


Reduce function

map function과 달리 list에 똑같은 함수를 적용해서 통합합니다.

from functools import reduce

print(reduce(lambda x, y: x+y, [1,2,3,4,5]))

Out:
15

파이썬의 내장 모듈인 functools에서 reduce()란 함수를 이용한다.

reduce의 기본 구조는 reduce(집계 함수, 순회 가능한 데이터[, 초기값])

위처럼 생겼고,

초기값을 기준으로 데이터를 돌며 집계 함수를 계속해서 적용하여 데이터를 누적 시키는 방식입니다.

그래서 집계 함수 자리에 lambda 함수인 x+y를 적용시켜 주었고,

초기값인 1부터 시작하여 계속 누적하여 합을 더합니다.

1+2+3+4+515가 됩니다.


Summary

  1. 배운 개념

Lambda, map, reduce

를 통해 간단하게 다양한 기능을 제공하는 코드들을 살펴보았다.

근데 python3에서는 직관성이 떨어진다는 이유로 lambda와 reduce는 사용을 권장하지 않는다고 한다!


Reference

🔗 머신러닝을 위한 파이썬 강의

무료 강의입니다! 강추!

profile
미남이 귀엽죠

0개의 댓글