본문 바로가기

흔한말 (collection)/Python

python reduce의 내용을 한 줄로 요약: "reduce는 요약한다"

300x250

python reduce는 리스트의 여러 원소들이 가진 특성을 하나로 정리해줍니다.
즉, 요약해줍니다.
(물론 리스트 뿐만이 아니고 모든 반복 가능한 데이터 형들이 대상입니다.)

특성을 하나로 정리한다는 말이 사실은 엄청 광범위한 말인데, 시각자료로 설명해보겠습니다.

 

눈이 휘둥그레지는 reduce 세계

reduce의 세계에 오신것을 환영합니다!
이곳은 아주 골 때리고 요절복통인 세계입니다..

 

이러한 리스트가 있다고 가정합시다.
7개의 원소가 있는 리스트군요.

 

그러고 나서 뜬금없이,

2개의 재료를 받아서 짝짜꿍 한 결과를 반환하는 "어떤 함수"를 준비합니다.
아직 질문하지 마세여.

좀 더 보시고 난 담에 질문하시어요.

 

그다음에 우리는 이런 짓을 할 겁니다.
a와 b만 꺼내서 어떤함수에 집어넣고, 짝짜꿍한 결과를 만들어내는 거죠.

a 와 b 가 나머지를 따돌리고 단 둘이서만 어떤 값을 만들었습니다. 거기다가 acc라는 이름을 붙였죠.
괘씸하죠?

 

단 둘이서만 결실을 만들어낸 a 와 b를 응징하기 위해 나머지 원소들도 참전합니다!!
a와 b가 만들었던 결과인 acc와 다시 결합해서 결과를 만들고, 그 결과의 이름도 acc로 붙여버립니다...!!!

보기에는 혼돈, 파괴, 망각이지만, reduce의 세계에서는 너무나도 질서 정연한 규칙이자 원리입니다.

reduce가 휩쓸고 간 자리에는 7개의 원소는 온데간데없고,
최종 결과인 acc만 남아서 광야에 떨고 있습니다.

 

짝짜꿍 과정을 코드로 살펴봅시다

자 이제 실제 코드로 좀 더 자세히 볼까요?

 

from functools import reduce

reduce는 파이썬 표준 라이브러리인 functools의 내부에 위치하고 있습니다. 따라서 위와 같이 import 한 뒤에 사용해야 합니다.

 

어떤리스트 = [ 1, 2, 3, 4, 5, 6, 7 ]

어떤 리스트를 준비하고요.

 

def 어떤더하기(a, b):
    acc = a + b
    return acc

그다음엔, a와 b를 짝짜꿍 시켜줄 어떤 더하기 함수를 만들어 줍니다.
재료로 받은 두 수를 더해서 그 값을 다시 반환해 주네요.

 

최종결과 = reduce(어떤더하기, 어떤리스트)
print(f"어떤리스트는 잊혀지고 마지막으로 {최종결과} 만 남았다...")
어떤리스트는 잊혀지고 마지막으로 28 만 남았다...

 

예제 코드를 보니 아까 그림으로 설명했던 과정이 더 자세히 이해가 되죠?

 

최초 값을 지정하는 경우의 reduce

reduce함수는 아까 전의 예제 코드에서는 함수 하나와, 리스트 하나를 인자로 받았습니다.
하지만 원래 reduce함수가 취하는 인자의 개수는 3개입니다. 하나는 어디로 간 걸까요?

별건 아니고 3번째 인자를 생략하면 자동으로 어떤 리스트의 0번째 값을 최초 값으로 지정합니다.

그런데 만약, 3번째 인자를 전달받으면 계산과정이 아주 살짝 달라집니다.
이것도 그림으로 보세요.

 

맨 처음 설명처럼 a와 b를 짝짜꿍 하는 게 아니라,
최초 값으로 받은 값을 a와 먼저 짝짜꿍 시킨 다음, 그 결과를 b랑 짝짜꿍 시킵니다.
코드로 써볼까요?

 

최종결과 = reduce(어떤더하기, 어떤리스트, 100)
print(f"어떤리스트는 잊혀지고 마지막으로 {최종결과} 만 남았다...")
어떤리스트는 잊혀지고 마지막으로 128 만 남았다...

 

최초 값이 100으로 주어지니, 100부터 시작해서 모든 원소들을 다 더한 값인 128이 결과로 반환되었습니다!!!!!!!

 

다음에는 map(), filter(), reduce()를 조합해서 다양한 방식으로 활용하는 법을 소개하는 포스팅으로 돌아오겠습니다.

반응형