파이썬 람다(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

Related posts

60코딩 커뮤니티spot_img

Latest posts

MLP를 활용한 로또 예측 프로그램

지난 포스팅에서는 회귀 분석 이론을 바탕으로 랜덤 포레스트라는 모델을 사용해서 로또 예측 프로그램을 만들어봤습니다. 이번 포스팅에서는 MPL(다중 퍼셉트론)을 활용해서 로또 예측 프로그램을 역시 심심풀이로...

회귀 분석을 활용한 로또 예측 프로그램

import pandas as pd import numpy as np from sklearn.model_selection import train_test_split from sklearn.ensemble import RandomForestRegressor # CSV 파일에서 과거 로또 번호 데이터 로드 (예: lotto_history.csv) # CSV 파일에는...

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

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