Recent Posts
Recent Comments
Archives
반응형
250x250
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Today
Yesterday

Total
05-09 03:58
관리 메뉴

Hey Tech

[파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식) 본문

SW 개발/Python

[파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식)

Tony Park 2021. 2. 26. 10:58
728x90
반응형

오늘은 reduce 함수에 대해 알아봅니다. reduce 함수와 람다 표현식을 함께 사용하면 코드를 간결하고 직관적으로 작성하는 데 큰 도움이 됩니다. 람다 표현식에 대한 포스팅은 아래 링크를 참고해 주세요!
heytech.tistory.com/17

[파이썬] lambda 함수는 언제, 어떻게 쓸까?

안녕하세요, 오늘은 파이썬 람다(lambda) 함수에 대해 알아보겠습니다. 바로 시작하죠! 1. Lambda 함수는 언제 사용하면 좋을까? 파이썬에서 특정 기능을 구현하고 반복적으로 직관적으로 사용하기

heytech.tistory.com

reduce 함수란?

reduce 함수는 *반복 가능한 객체(iterable object) 내 각 요소를 연산한 뒤 이전 연산 결과들과 누적해서 반환해 주는 함수입니다.
*반복 가능한 객체(iterable object)란 말 그대로 반복이 가능한 객체로서 요소가 하나의 객체에 여러 개가 들어있고, 한 번에 하나의 요소씩 사용할 수 있는 객체를 말합니다. 대표적으로는 문자열(string), 리스트(list), 딕셔너리(dictionary), 세트(set)가 있습니다.

from functools import reduce

참고로 파이썬3부터는 reduce가 내장 함수가 아니기 때문에 functools 모듈에서 reduce 함수를 불러와야 합니다.

연습 문제

Q. 리스트에 1부터 20까지의 정수가 담겼을 때, 해당 리스트의 모든 요소의 합을 출력하는 코드를 작성하시오.

(1) reduce 함수를 사용하지 않은 코드

def SumFunction(x, y):
    return x + y

target = list(range(1, 21))
result = 0
for value in target:
    result = SumFunction(result, value)
print(result) # 실행 결과: 210


누적 합계를 구하기 위해 함수를 따로 정의하고 반복문을 활용하였습니다.

(2) reduce 함수를 사용한 코드

from functools import reduce
def SumFunction(x, y):
    return x + y
    
target = list(range(1, 21))
print(reduce(SumFunction, target)) # 실행 결과: 210


앞서 함수 sum_function 에서 "x + y" 값을 리턴하도록 정의하였기 때문에, 반복 가능한 객체(target)에서 그림 1 과 같이 요소 두 개씩 더한 값을 누적합니다.

그림 1.  연산 결과를 누적해서 반환하는 reduce 함수 시각화

(3) reduce 함수와 lambda 표현식을 사용한 코드

from functools import reduce
target = list(range(1, 21))
print(reduce(lambda x, y: x + y, target)) # 실행 결과: 210


reduce 함수와 lambda 표현식을 활용하면 위와 같이 코드를 더욱 간결하고 직관적으로 작성하실 수 있습니다.

참고할 만한 포스팅

1. [파이썬] lambda 함수는 언제, 어떻게 쓸까?
2. [파이썬] map 함수에 대해 알아보자(Feat. lambda 표현식)
3. [파이썬] filter 함수에 대해 알아보자(feat. lambda 표현식)
4. [파이썬] reduce 함수에 대해 알아보자(feat. lambda 표현식)

포스팅 내용에 오류가 있는 부분이 있을 경우 댓글을 남겨 주시면 감사드리겠습니다.
그럼 오늘도 건강한 하루 보내시길 바랍니다 :-)
고맙습니다.

728x90
반응형
Comments