Python

[Python] accumulate - 누적 합 구하기

비번변경 2024. 10. 29. 16:03

개요

최근 알고리즘 문제를 풀면서 구간 합을 구할 때는 구간 합 자체를 계산하기보다는 누적 합을 이용해 계산하는 방법이 더 효율적인 방법임을 알게 되었다. 누적 합 자체는 for문을 이용해서도 구할 수 있지만, itertools.accumulate 함수를 이용하는 것이 좀 더 효율적이다.

이번 글에서는 accumulate 함수 사용법에 대해서 적어둔다.

 

 

accumulate

accumulate 함수는 function으로 전달받은 함수에 대해 누적된 합계나 누적된 결과를 반환하는 iterator를 만든다.

itertools.accumulate(iterable[, function, *, initial=None])

기본적으로 덧셈에 해당하는 add 함수를 사용한다. initial에는 초기값을 전달할 수 있는데, initial을 제공하면 해당 값부터 시작한다.

 

 

사용 예시

- 기본

from itertools import accumulate

list_num = list(range(1, 6))
print(f'list_num : {list_num}')
print(f"accumulate : {list(accumulate(list_num))}")

 

- 초기값 제공

from itertools import accumulate

list_num = list(range(1, 6))
print(f'list_num : {list_num}')
print(f"accumulate (initial=0) : {list(accumulate(list_num, initial=0))}")

initial을 제공하면 매개변수로 제공한 iterable보다 요소 하나가 더 추가된 결과를 반환하는 것을 확인할 수 있다.

 

- 함수 제공

import operator
from itertools import accumulate

list_num = list(range(1, 6))
print(f'list_num : {list_num}')
print(f"accumulate (sub) : {list(accumulate(list_num, operator.sub))}")

덧셈 함수가 아닌 다른 함수에 대해서도 누적 결과를 얻을 수 있다. 전달하는 함수는 누적된 값과 iterable로부터의 값에 해당하는 두 개의 매개변수를 허용해야 한다.

 

 

참고 문서

https://docs.python.org/3/library/itertools.html#itertools.accumulate

https://deok2kim.tistory.com/95