Python

Python - functools 의 reduce() 함수

Hwisaek 2021. 8. 1. 03:40
반응형
def reduce(function, sequence, initial=_initial_missing):
    """
    reduce(function, sequence[, initial]) -> value

    Apply a function of two arguments cumulatively to the items of a sequence,
    from left to right, so as to reduce the sequence to a single value.
    For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates
    ((((1+2)+3)+4)+5).  If initial is present, it is placed before the items
    of the sequence in the calculation, and serves as a default when the
    sequence is empty.
    """

    it = iter(sequence)

    if initial is _initial_missing:
        try:
            value = next(it)
        except StopIteration:
            raise TypeError("reduce() of empty sequence with no initial value") from None
    else:
        value = initial

    for element in it:
        value = function(value, element)

    return value

functools의 reduce 함수입니다. 매개변수로는 function, sequence, initial을 가집니다. sequence의 데이터들을 초기값에 function으로 처리해서 값을 돌려주는 것으로 다음과 같이 사용할 수 있습니다.

 

 

예시
>>> from functools import reduce
>>> reduce(lambda a, b: a * b, [1, 2, 3, 4, 5])
120

이 코드를 예로 들면 람다식을 중첩해서 연산하는 것으로 간단히 설명하자면 다음과 같습니다.

 

(((1 * 2) * 3) * 4) * 5)

 

람다식 대신 sum 함수를 넣으면 이렇게 됩니다.

 

 

initial의 역할

 initial의 역할은 중첩해서 연산할 때 맨 앞에 초기값을 넣을지에 대한 것입니다. 

 

 위의 코드는 초기값을 10으로 설정한 것으로, 간단히 설명하자면 다음과 같습니다.

 

((((10 * 1) * 2) * 3) * 4) * 5)

 

 기존 코드에는 초기값이 없어 1*2를 바로 수행했지만, 여기서는 10을 초기값으로 설정하여 연산하므로 10*1부터 연산을 수행합니다. 이를 이용하면 데이터에서 값을 하나씩 꺼내서 처리하는 연산을 할 때 좀 더 간단하게 코드를 짤 수 있습니다.

 

 

 

반응형

'Python' 카테고리의 다른 글

Python - sys.stdin.readline() 개행 문자 처리  (0) 2021.08.02