[Python 내장 함수] Sum() : 시퀀스 자료형(리스트..) 합계 구하기

 

 


1. Sum()함수란?

 

파이썬에서 여러 숫자들이 포함된 시퀀스 자료형(리스트, 튜플 등)을 입력받아 그 합계를 반환하는 방법 중 가장 기본적인 방법은 Sum()함수를 사용하는 것입니다. 기본적인 사용법은 아래 코드와 같습니다.

 

>>> numbers = [1, 2, 3, 4, 5]
>>> result = sum(numbers)
>>> print(result)  

# 출력: 15

 


Sum()함수의 두 번째 인자로 시작 값(start)을 설정할 수 있습니다. 이 값을 설정하면 합계를 구할 때 시작 값부터 누적하여 계산합니다.

 

>>> numbers = [1, 2, 3, 4, 5]
>>> result = sum(numbers, 10)
>>> print(result)  

# 출력: 25

 


 

2. Sum()함수 주의 사항

 

Sum() 함수를 사용할 때 주의해야 할 점은 숫자와 문자열이 함께 포함된 시퀀스는 처리할 수 없다는 것입니다. 또한 Sum() 함수의 시간복잡도는 O(n)으로, 시퀀스 자료형의 길이에 비례합니다. 따라서 긴 시퀀스의 합계를 구할 때 시간이 오래 걸릴 수 있습니다. 이때 속도를 개선하는 방법으로 numpy 모듈을 사용하는 방법이 있습니다. 아래 코드는 numpy모듈을 이용해 합계를 구하는 코드입니다.

>>> import numpy as np

>>> numbers = [1, 2, 3, 4, 5]
>>> result = np.sum(numbers)
>>> print(result)  

# 출력: 15

 


3. Sum() 함수 응용

3.1 누적합 구하기

 

아래 코드는 Sum()함수를 활용해 시퀀스의 누적합을 구하는 코드입니다. 누적합은 주어진 수열에서 각 위치까지의 합을 나타내는 새로운 수열을 말합니다.

 

>>> numbers = [1, 2, 3, 4, 5]
>>> cumulative_sums = []

>>> for i in range(len(numbers)):
>>>     partial_sum = sum(numbers[:i+1])
>>>     cumulative_sums.append(partial_sum)

>>> print(cumulative_sums) 

# 출력: [1, 3, 6, 10, 15]

 


3.2 행렬의 합 구하기

 

아래 코드는 Sum()함수를 활용해 matrix1행렬과 maxtrix2 행렬의 합을 구하는 코드입니다. 'zip(matrix1, matrix2)'를 사용해 두 행렬의 행(row)을 순서대로 짝지어 반복문을 수행합니다. 그리고 각 행에서 'zip(*rows)'를 사용해 두 행렬의 열(column)을 순서대로 짝지어 반복문을 수행합니다.

 

*rows는 파이썬의 가변 인자(unpacking) 문법을 사용한 표현입니다. 이 문법은 rows라는 튜플을 개별 요소로 분리하여 전달할 수 있도록 합니다. 이 문법은 zip 함수와 함께 사용될 때 특히 유용합니다. 아래 코드에서는 *rows을 zip(*rows) 내부에서 사용했습니다. 그래서 두 행렬의 같은 위치에 있는 원소끼리 묶어서 새로운 튜플 pair를 생성하게 됩니다.

 

>>> matrix1 = [[1, 2], [3, 4]]
>>> matrix2 = [[5, 6], [7, 8]]
>>> result = []

>>> for rows in zip(matrix1, matrix2):
>>>     row_result = []
>>>     for pair in zip(*rows):
>>>         row_result.append(sum(pair))
>>>     result.append(row_result)

>>> print(result)  

# 출력: [[6, 8], [10, 12]]

 


3.3 조건에 따른 합계 구하기

 

아래 코드는 Sum()함수를 활용해 특정 조건에 만족하는 요소들의 합계를 구하는 코드입니다.

 

>>> numbers = [1, 2, 3, 4, 5]
>>> result = 0

>>> for n in numbers:
>>>     if n % 2 == 0:
>>>         result += n

>>> print(result) 

# 출력: 6