쿼카러버의 기술 블로그

[Python Advanced] reduce 함수란? (쉬운 설명 & 다양한 예시) 본문

[Python]

[Python Advanced] reduce 함수란? (쉬운 설명 & 다양한 예시)

quokkalover 2022. 2. 5. 15:34

Reduce

reduce()함수는 여러개의 데이터를 대상으로 누적 집계를 내기 위해 사용되는 함수다.

 

reduce함수를 한 줄로 설명하자면 iterable를 단일 값으로 줄이기(reduce)위해 iterable의 element들을 왼쪽에서 부터 오른쪽으로 매개변수로 넘어온 함수에 대해 누적적용하는 built-in함수다.

 

당연히 내가 써놓고도 무슨말인지 잘 모르겠다. 이해하고보면 잘 정리가 된 글이지만, 이런 류는 그냥 예시를 보고 이해하는게 가장 편하다.

 

특징

reduce(집계 함수, 순회 가능한 데이터[, 초기값])
  • 집계 함수는 두 개의 인자를 받는다. 첫 번째 인자는 누적자(accumulator), 두 번째 인자는 현재값이 넘어오게 된다. 누적자는 함수 실행의 시작부터 끝까지 계속해서 재사용되고, 현재값은 루프를 돌면서 계속해서 바뀐다.

 

예를 들어 아래 예제를 보면 1, 2, 3, 4, 5를 전부 더한 결과를 반환한다.

from functools import reduce

result = reduce(lambda acc, value: acc + value, [1, 2, 3, 4, 5])
# ((((1+2)+3)+4)+5)

근데 reduce는 아래처럼 초기값을 설정할 수도 있다.

result = reduce(lambda acc, value: acc + value, [1, 2, 3, 4, 5], 100)
# 100 + ((((1+2)+3)+4)+5)

위에서 알 수 있듯이 가장 초기값을 100으로 설정해두고 위 함수를 실행하면 115가 리턴된다.

 

사용 예시

누적 연산

from functools import reduce
def Sum(x, y):
    return x + y

result = list(range(1, 21))
print(reduce(Sum, result)) 
# 실행 결과: 210 (1부터 20까지 더한 값)

최대 값 구하기

  • 누적값 말고도 아래처럼 최대값을 구하는데 사용할 수도 있다.
from functools import reduce

func = lambda a, b: a if (a > b) else b
result = reduce(func, [1, 100, 2, 55])

print(result)

Dictionary활용 데이터 실습

faker를 활용해 가짜 데이터를 만들어보자

from functools import reduce
from faker import Faker
fake = Faker()
users = [{"name":fake.name(), "age":fake.random_int(0, 100), } for x in range(10)]

language = ['korean','english','german']
for i in range(len(users)):
    users[i]["language"] = language[i%3]

print(users)

total age구하기

이제 reduce를 사용해 total age를 구해보자

accum_age = reduce(lambda acc, val: acc + val['age'], users, 0)
  • 위와 같이 dict를 iterate하는 경우 초기 누적값을 세팅해주어야 한다.

language별로 그루핑

def reducer(acc, val):
    acc[val["language"]].append(val["name"])
    return acc

users_by_language = reduce(reducer, users, defaultdict(list))

print(users_by_language)

 

 

lambda함수의 쉬운 설명과 다양한 예시가 궁금하다면 아래 글을 참고하기를 바란다.

https://etloveguitar.tistory.com/97

 

[Python Advanced] 람다 함수란? (쉬운 설명 & 다양한 예시)(map, filter, reduce)

Lambda 함수란 파이썬에서 lambda는 런타임에서 생성해서 사용할 수 있는 익명 함수다. 자바스크립트에서의 람다 함수와는 조금은 다르다. 특징 : 람다는 N개의 매개변수를 가질 수 있지만, 하나의 e

etloveguitar.tistory.com

 

또, 파이썬에서 자주 사용되는 내장함수인 각 map, filter에 대해 글을 정리해두었는데, 필요하다면 참고하길 바란다.

클릭!!
[Python Advanced] map함수란? (쉬운 설명 & 다양한 예시)
[Python Advanced] filter 함수란? (쉬운 설명 & 다양한 예시)

 

 

 

 

참고자료

https://zetcode.com/python/faker/

https://www.daleseo.com/python-functools-reduce/

https://technote.kr/344

https://brownbears.tistory.com/457

Comments