728x90
1. accumulate란?
Python의 itertools 모듈에 포함된 함수로, 누적 합계 또는 누적 계산을 수행하는데 사용된다.
기본적으로 입력 시퀀스 요소들에 대해 누적 합을 계산하지만, 함수 인수를 제공하여 다른 누적 연산도 수행할 수 있다.
1.1 기본 사용법
itertools.accumulate(iterable, func=operator.add)
- iterable : 누적 계산을 수행할 입력 시퀀스
- func : 두 인수를 취하고 하나의 값을 반환하는 이항 함수. 기본 값은 operator.add로 누적합계를 계산하다.
- 입력된 iterable과 같은 타입의 값을 생성하는 이터레이터를 반환한다. list로 변환하여 결과를 확인할 수 있다.
1.2 사용 예시
1.2.1 기본 사용법 (누적 합계)
import itertools
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data)
print(list(result))
# 출력결과
# [1, 3, 6, 10, 15]
1.2.2 operatr 모듈의 함수 이용한 누적 곱
accumulate 함수의 func 매개변수에 사용할 수 있는 다양한 기본 함수들은 python 표준 라이브러리에서 제공하는 여러 이항함수들이다.
이 함수들은 operator 모듈에 주로 포함되어 있으며, 수학적 연산, 비트 연산, 비교 연산 등을 수행할 수 있다.
더보기
1. 수학적 연산
- operator.add(a, b) : 두 값을 더합니다.
- operator.mul(a, b) : 두 값을 곱합니다.
- operator.sub(a, b) : 두 값을 뺍니다.
- operator.truediv(a, b) : 두 값을 나눕니다.
- operator.floordiv(a, b) : 두 값을 나눈 몫을 구합니다.
- operator.mod(a, b) : 두 값을 나눈 나머지를 구합니다.
- operator.pow(a, b) : a를 b만큼 제곱합니다.
2. 비트 연산
- operator.and_(a, b) : 두 값의 비트 AND 연산을 수행합니다.
- operator.or_(a, b) : 두 값의 비트 OR 연산을 수행합니다.
- operator.xor(a, b) : 두 값의 비트 XOR 연산을 수행합니다.
- operator.lshift(a, b) : a를 b만큼 왼쪽으로 시프트합니다.
- operator.rshift(a, b) : a를 b만큼 오른쪽으로 시프트합니다.
3. 비교 연산
- operator.lt(a, b) : a < b
- operator.le(a, b) : a <= b
- operator.eq(a, b) : a == b
- operator.ne(a, b) : a != b
- operator.ge(a, b) : a >= b
- operator.gt(a, b) : a > b
import itertools
import operator
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data, func=operator.mul)
print(list(result))
# 출력 결과
# [1, 2, 6, 24, 120]
1.2.3 람다 함수를 사용한 누적 계산
import itertools
data = [1, 2, 3, 4, 5]
result = itertools.accumulate(data, func=lambda x, y: x - y)
print(list(result))
# 출력 결과
# [1, -1, -4, -8, -13]
1.2.4 사용자 정의 함수 활용
사용자 정의 함수로 각 요소의 제곱을 누적합에 더하는 예제이다.
사용자 정의함수는 두개의 매개변수를 필요로 한다.
- acc : 누적 값. 현재까지 계산된 결과를 의미한다.
- x : 현재 요소. 현재 이터레이션에서 처리 중인 입력 시퀀스의 요소를 의미한다.
함수는 입력 시퀀스의 첫 번째 요소를 누적값(acc)의 초가값으로 사용하고, 이후 각 요소마다 acc와 x를 인수로 하여 함수를 호출한다.
import itertools
data = [1, 2, 3, 4, 5]
def accumulate_square_sum(acc, x):
return acc + x ** 2
result = itertools.accumulate(data, func=accumulate_square_sum)
print(list(result))
# 출력 결과
# [1, 5, 14, 30, 55]
728x90
'study' 카테고리의 다른 글
[Python] 문자열을 특정 길이로 맞추기 (0) | 2024.09.04 |
---|---|
imos 알고리즘 (0) | 2024.07.02 |