일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- homogeneous linear system
- 빅세타
- Big-Oh notation
- Big-Oh 예제
- Big Omega
- 빅오메가
- nontrivial solution
- solutions of matrix equation
- itertools
- 재귀함수
- matrix trnasformations
- linear dependence
- 이진 탐색
- matrix fo a linear transformation
- python
- one-to-one
- trivial solution
- nonhomogeneous linear system
- 일차변환
- recursive algorithms
- Big-O 예제
- 코틀린 시작하기
- Big Theta
- 배열 섞기
- 알고리즘 분석의 실례
- 빅오 표기법
- 코틀린 Hello World!
- 랜덤 순서 배열
- NumPy
- matrix-vector product
- Today
- Total
코딩 연습
(파이썬) functools 모듈의 reduce 함수 본문
functools 모듈의 reduce 함수는 다음과 같다.
def reduce(function, iterable, initializer=None):
it = iter(iterable)
if initializer is None:
value = next(it)
else:
value = initializer
for element in it:
value = function(value, element)
return value
reduce 함수는 매개 변수로 function, iterable[, initializer] 를 갖는다. function 과 iterable 은 반드시 전달되어야 하고, initializer 는 선택적이라고 보면 된다. 위 코드를 보면 알겠지만 reduce 함수는 다음과 같이 iterable 의 요소들을 function 에 대입하여 결국 하나의 결과값을 리턴해 주는 함수이다. 만약 function 에는 $\rm func$ 가 iterable 에는 $[a_1, \; a_2, \; a_3, \; a_4]$ 가 전달되었다고 하면 reduce 함수는 다음의 결과를 리턴한다. $${\rm func}({\rm func}({\rm func} (a_1, \; a_2), \; a_3), \; a_4) $$
다음 예제를 보면 쉽게 이해할 수 있을 것이다.
>>> def sum(x, y):
... return x+y
...
>>> reduce(sum, [1, 2, 3, 4, 5])
15
위 예제에서는 function 으로는 두 개의 수 x, y 를 매개변수로 받아서 두 수의 합을 리턴하는 함수 sum 이, iterable 에는 리스트 [1, 2, 3, 4, 5] 가 전달되었다. 결국 reduce 함수는 다음의 15라는 하나의 값을 리턴하게 된다. $${\rm sum}({\rm sum}({\rm sum}({\rm sum}(1, \;2), \; 3), \; 4), \; 5)=((((1+2)+3)+4)+5)=15$$ 함수 sum 을 다음과 같이 lambda 를 이용하여 표현할 수도 있다.
>>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
15
그렇다면 initializer 의 역할은 무엇인가? initializer 는 말 그대로 초기값을 의미한다. 다음의 예제처럼 초기값을 10으로 주면 어떻게 될까?
>>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5], 10)
25
결과가 25가 되는 것을 볼 수 있다. reduce 함수 코드에서 봤던 value 의 값에 10이 저장된 상태로 시작하기 때문에 다음의 결과가 리턴되는 것이다. $$(((((10+1)+ 2)+ 3)+4)+5)=25$$ 이제 reduce 함수를 이용한 예제를 보자. reduce 함수를 이용하면 factorial 의 계산도 쉽게 할 수 있다.
>>> reduce(lambda x, y: x*y, range(1, 6))
120
따라서 $n!$ 계산을 하고 싶다면 다음과 같이 함수 factorial 을 만들면 된다.
>>> def factorial(n):
... return reduce(lambda x, y: x*y, range(1, n+1))
...
>>> factorial(6)
720
reduce 함수를 이용하여 다음과 같이 최댓값을 구하는 것도 가능하다.
>>> func = lambda a, b: a if (a > b) else b
>>> reduce(func, [34, 76, 29, 96, 68])
96
이렇듯 reduce 함수는 다양하게 응용이 가능하다.'Python' 카테고리의 다른 글
(파이썬) numpy.arange (0) | 2017.03.25 |
---|---|
(파이썬) Python 내장함수 all (0) | 2017.03.24 |
(파이썬) Python 내장함수 enumerate (0) | 2017.03.22 |
(파이썬) itertools 모듈의 takewhile 함수 (0) | 2017.03.22 |
(파이썬) itertools 모듈의 count 함수 (0) | 2017.03.21 |