파이썬 람다(Lambda) & Map 함수 #2

지난 콘텐츠에서는 람다(Lambda)와 Map을 살짝 살펴봤어요. 람다와 맵은 같이 사용하는 경우가 많고, 또 다른 Reduce() 람다, 맵 함수와 같이 많이 사용하게 됩니다. 우선 지난 시간에 했던 부분을 살짝 응용한 코드를 살펴보겠습니다.

#1부터 99까지 출력, 단 5의 배수는 '5의 배수'로 출력
#람다식에서 if문 사용 가능
print(list(map(lambda x: '5의 배수' if x % 5 == 0 else x, range(1,100))))

람다(Lambda) 함수 안에서, If문을 자주 사용하게 됩니다. 주의사항은 If문의 반환값은 맨 앞에, 마지막에 else 반환값을 넣습니다.

Reduce 함수

reduce 함수는 ‘연결, 누적’ 이 키워드를 머릿속에 기억하시면 됩니다. 시퀀스의 요소들의 연결 또는 누적이 필요할 때, reduce 함수를 사용하면 됩니다. 그리고 판다스에서는 정말 많이 사용하는 함수입니다. 우선 코드 예제를 살펴볼까요?

from functools import reduce #파이썬3에서는 해당 구문이 필요함
print(reduce(lambda x, y: x + y, range(1, 10)))
#결과는 직접 코딩해서 확인

위 코드는 reduce 함수를 사용해서 ‘1부터 9’까지의 합을 구할 수가 있어요. 각각의 요소들을 하나씩 누적해서 더하게 되는 구조입니다. 이것을 조금 더 응용해볼까요? 수학 시간에 배웠던 팩토리얼 기억하시나요? 예를들면 5! = 5*4*3*2*1이 됩니다. Reduce 함수를 포함한 다양한 방식으로 팩토리얼 값을 출력하는 프로그램을 만들어 보겠습니다!


#팩토리얼 구하기 - 반복문 활용
def fac_for(n):
    a = 1
    for i in range(1, n+1):
        a *= i
    return a
print(fac_for(9))

#팩토리얼 구하기 재귀함수 활용
def fac_rcs(n):
    return n * fac_rcs(n-1) if n > 1 else 1

print(fac_rcs(9))

#팩토리얼 구하기 Reduce함수 활용
from functools import reduce

def fac(n):
    return reduce(lambda x, y: x*y, range(1, n+1))
print(fac(9))

위 세 코드 모두 ‘누적, 연결, 반복’의 특징을 갖고 있습니다. 첫 번째 방식은 너무나 쉽고 직관적인 반복문 For을 활용했고, 두 번째는 낯선 분들도 있겠지만 ‘재귀함수’에요. 저는 개인적으로 재귀함수를 많이 사용하는 편입니다. 재귀함수는 나중에 또 설명드릴게요~ 우선 ‘재귀함수’는 종료 조건(탈출 조건)이 반드시 필요하다는 사실만 우선 Check! 그리고 마지막으로 Reduce와 람다(Lambda)를 활용해서 팩토리얼을 구해봤습니다. 앞에서 말씀드린 것처럼 Reduce 함수는 ‘누적’입니다. [1, 2, 3, 4, 5, 6, 7, 8, 9]에서 처음에는 첫 원소 1부터 차례대로 곱해나가며 마지막 원소인 9까지 곱한 하나의 값을 반환하게 됩니다. 조금 어렵나요? 해당 특성을 활용한 몇 가지 예제를 직접 만들어서 해보시는 것이 코딩 공부에서는 가장 좋습니다.

More from author

1 COMMENT

LEAVE A REPLY

Please enter your comment!
Please enter your name here

Related posts

60코딩 커뮤니티spot_img

Latest posts

‘기초~중급 Python 문법’ 정모(2022.03.04)

최근에 기초~중급 수준의 내용으로 정모를 가졌어요. 물론, 저희 60coding은 클래스 모임이 아닌 코딩 공부(주제는 미리 공지) 리뷰와 잡담 위주의 모임을 추구합니다. 60Coding의 최민진 멘토님이...

파이썬 람다(Lambda) & Map 함수 #1

람다(Lambda) 함수 뭔가 거창하고 수학에서 유래된 이름을 갖고 있기 때문에 상당히 어려운 놈일 거라 생각하시는 분들이 있겠지만, 람다(Lambda) 함수는 기존의 함수를 조금 더 간단히 축약된...

파이썬 기초 #6(연산자/Input)

연산자 연산자기능예제+더하기x + y = 10-빼기x - y = 20*곱하기x * y = 30/나누기x / y = 3%나머지x % y = 1**제곱x ** y =...