본문 바로가기
Backjoon

[python] functooles 모듈 reudce lambda

by ddahu 2023. 2. 6.

코딩테스트의 해설을 보던중 reduec , lambda를 적용하여 푸는 문제가 있어 기록

우선 .reduce () 

from functools import reduce
reduce(function, iterable, initializer=None)

reduce 함수는 위와 같은 파라미터를 받고 있고 , 첫번째 파라미터에 function() 함수가 들어가고 두번째 파라미터는 반복하고자 할 List [] 가 들어게 된다. initializer = None 은 초기값을 설정해 줄 수 있고 default 는 None으로 처리를 안해주면 초기값은 none 이다.

 

예제 코드 

 

print(f'{reduce ( lambda x,y : x*y ,[1,2,3,4,5])}')

출력 결과

출력 결과

 

초기 값이 없다면 빈값부터 시작해서 끝까지 누적 lambda 식을 계산해서 return 한다. 

 

만약 초기값에 0 을 넣었다면 , 연산은 0 * 1 로 시작 하게 된다.

 

예제코드( 초기값 )

print(f'{reduce ( lambda x,y : x*(y+1) ,[4,3,4],1)}')

 

출력결과

초기값을 1로 설정해 두었을때 reduece (lambda) 는 1부터 시작해서 계산을 해준다.

 

예제코드( 조건식 )

 

lst = [1 for _ in range(20)]
cmp = 99
lst.insert(5,100)
print(lst)
print(f'{reduce(lambda x,y : x if x > y else y ,lst,cmp)}')

간단하게 조건식을 세워서 리스트내에 초기값 cmp 와 비교값 lst 를 돌면서 최대값이 뭔지 출력하는 부분이다.

출력결과

 

 

lst = 20개의 리스트를 1로 채우고 

cmp = 테스트 비교값

5번째 인덱스에 100을 넣고

reduce lambda 를 통해 초기값 cmp 와 lst 를 비교해 가면서 최대값이 뭔지 출력한다.

만약 cmp = 101 이면 출력값은 101이 나온다.

 

 

reduce lambda 에서 중요한점은 초기값과 누적값이라고 생각한다.