ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • reduce함수
    Python/Basic 2022. 12. 11. 20:41


    reduce함수 

    # syntax
    reduce(집계함수, 순회가능한데이터)

    - functools 내장 모듈의 reduce()함수는 여러개의 데이터를 대상으로 주로 누적 집게를 내기 위해서 사용 
    - 집계함수에서는 두개의 인자를 사용, 첫번째는 인자는 누적자(accumulator), 두번째 인자는 현재값(current value)가 넘어온다 
    누적자(accumulator)는 함수 시작부터 끝까지 계속 재사용되는 값이고 현재값은 '순회가능한데이터' 에서 바뀌는 값 
    - 순회가능한데이터는 문자열, 리스트, 튜플... 등 시퀀스를 말한다


    #  reduce함수 

    from functools import reduce

    def add_func(a,b):
      return a + b

    def mul_func(a,b):
      return a * b

    a_list = list(range(1,11))

    print(reduce(add_func, a_list)) # 55
    print(reduce(mul_func, a_list)) # 3628800




    =============================================

    lambda 함수 

    # syntax
    labmda(인수들, 표현식)

    - 단순한 1회용 함수를 만들고 싶을 때 사용
    - 이름이 존재하지 않는함수
    - 인수들은 없거나 1개이상일 때는 콤마(,)로 구분한다 

    print((lambda x,y : x + y)(10,10)) # 20 

    add_func = (lambda x,y : x + y)
    print(add_func(10,10))  # 20 

    cf.  
    # 만약 전달 인수 갯수에 맞지 않는다면은 오류남! 
    TypeError: <lambda>() missing 1 required positional argument: 'y'
    print((lambda x,y : x + y)(10)) 


    =============================================
    lambda 함수와 reduce 함수를 같이! 썼을 때 빛을 발한다 

    reduce(lambda acc, cur: acc + cur["age"], users, 0)
    from functools import reduce 

    a_list = list(range(1,11))

    print(reduce(lambda x,y:x+y, a_list))
    print(reduce(lambda x,y: x*y, a_list))


    ====================================



    예시2
    # reduce함수를 이용하여 나이의 합을 구해보자! 
    from functools import reduce 


    users = [{'mail': 'gregorythomas@gmail.com', 'name': 'Brett Holland', 'sex': 'M', 'age': 73},
    {'mail': 'hintoncynthia@hotmail.com', 'name': 'Madison Martinez', 'sex': 'F', 'age': 29},
    {'mail': 'wwagner@gmail.com', 'name': 'Michael Jenkins', 'sex': 'M', 'age': 51},
    {'mail': 'daniel79@gmail.com', 'name': 'Karen Rodriguez', 'sex': 'F', 'age': 32},
    {'mail': 'ujackson@gmail.com', 'name': 'Amber Rhodes', 'sex': 'F', 'age': 42}]

    # reduce(집계함수, 순회가능한데이터)  


    def sol(cal,users):
      v = users["age"]
      cal += v
      return cal 


    print(reduce(sol,users,0)) # 227 

    print(reduce(lambda ans, k: ans + k["age"], users, 0)) # 227 


    ==================================


    'Python > Basic' 카테고리의 다른 글

    모듈(module)  (0) 2022.12.11
    Python에서 가상환경 만들기  (0) 2022.11.30
    __getitem__  (0) 2022.10.13
    데코레이터(Decorator)  (0) 2022.10.12
    람다(Lambda)와 클로저(Closure)  (1) 2022.09.29

    댓글

Designed by Tistory.