본문 바로가기

CS/Python

Lambda & MapReduce

@Lambda

-함수 이름없이 함수처럼 쓸 수 있는 익명 함수

-수학의 람다 대수에서 유래

-Python3부터는 권장하지는 않지만 여전히 많이 쓰임 

(List Comprehension으로 대체 가능하지만 판다스 등에서 효율적으로 사용 가능하기 때문)

 

 

 

보통 함수에서 함수 선언 후 함수 이름 지정, 인자값 지정, 리턴 값 선언해주는 형태라면

람다 함수는 람다 선언 후 입력값, 반환값 선언해주는 형태

(익명 함수를 변수에 넣어주면 그 변수 자체가 하나의 함수가 되는 형태)

 

 

 

@Map 함수

-Squence 자료형(List, Tuple) 각 element에 동일한 function 적용

-코드 직관성이 떨어지기 때문에 Python3부터는 권장하지는 않지만 여전히 많이 쓰임 

 

 

 

 

실습)

# 1
def f(x, y):
    return x + y


print(f(1, 4))


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


#3
f = lambda x: x ** 2
print(f(3))


#4
f = lambda x: x / 2
print(f(3))


#5
print((lambda x: x + 1)(5))

 

 

# From Python 3, you must add 'list' before the map function
a = [1,2,3,4,5]
print(list(map(lambda x: x+x, a)))  # [2, 4, 6, 8, 10]
print((map(lambda x: x+x, a)))  # <map object at 0x00000239631301C0>

Python3부터는 반드시 map 함수 앞에 list를 붙여줘야 함

(안 붙이면 위치값 출력됨)

 

 

a = [1, 2, 3, 4, 5]
fun = lambda x, y: x + y
print(list(map(fun, a, a)))
# [2, 4, 6, 8, 10]

zip 함수를 쓰지 않고도 한번에 두 개의 리스트 값도 연산 가능

 

 

a = [1, 2, 3, 4, 5]
print(list(map(
    lambda x: x ** 2 if x % 2 == 0 else x,
    a)))
# [1, 4, 3, 16, 5]

람다도 필터를 해줄 수 있는데, 조건 만족하지 않을 때 else값을 꼭 지정해줘야 함!

 

 

a = [1, 2, 3, 4, 5]
fun = lambda x: x ** 2
print(map(fun, a))  # <map object at 0x0000018B19E30340>
for i in map(fun, a):
    print(i)
# 1
# 4
# 9
# 16
# 25   

result = map(fun, a)
print(result)  # <map object at 0x0000018271C00340>
print(next(result))  # 1

터레이터를 만든 후에 각각의 값들을 호출해서 쓸 수도 있음

 

 

 

@Reduce 함수

-map 함수와 달리 list에 똑같은 함수 적용해 통합

-하나하나 옆으로 가면서 적용됨

-일반적으로 map과 reduce는 같이 쓰임

-코드 직관성이 떨어지기 때문에 Python3부터는 권장하지는 않지만 여전히 많이 쓰임 

 

 

 

실습)

from functools import reduce
print(reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]))  # (((1+2)+3)+4)+5
# 15

 

 

# factorial
from functools import reduce
def factorial(n):
    return reduce(
            lambda x, y: x*y, range(1, n+1))


factorial(5)
# 120

팩토리얼의 경우 reduce 함수를 쓰면 더 효율적

 

 

'CS > Python' 카테고리의 다른 글

Data Structure - Collections  (0) 2021.01.13
Asterisk  (0) 2021.01.11
Enumerate & Zip  (0) 2021.01.10
List Comprehension  (0) 2021.01.10
Split & Join  (0) 2021.01.10

Tiny Star