Python의 합계 함수 이해 [With Examples]
파이썬에서 sum() 함수를 활용하는 모든 방법을 알아보세요. 다양한 반복 가능한 객체와 함께 사용되는 구문과 실용적인 코드 예시를 제공합니다.
파이썬에서 숫자 리스트와 같은 반복 가능한 데이터 구조를 다룰 때, 리스트 내 모든 요소의 총합을 구하는 작업은 매우 일반적입니다. 이러한 작업은 튜플, 세트 등 다른 반복 가능한 객체를 사용할 때도 자주 발생합니다.
이러한 합계 계산은 여러 방법으로 수행할 수 있지만, 파이썬에서는 내장 함수인 sum()을 사용하는 것이 가장 권장되는 방식입니다.
이 글에서는 반복문과 함수 정의 등 다른 접근 방식을 먼저 살펴본 후, 파이썬 sum() 함수의 구문과 이를 더 깊이 이해하기 위한 다양한 코드 예제를 소개합니다.
파이썬 반복 객체의 값 합산
📋 파이썬 REPL 환경에서 직접 코드를 따라 하거나, 온라인 파이썬 편집기를 활용하여 코드를 실행해 볼 수 있습니다.
다음과 같은 숫자 리스트를 예시로 들어보겠습니다.
>>> nums = [2, 8, 5, 3, 11, 7, 9]
목표는 이 리스트에 포함된 모든 숫자의 합을 구하는 것입니다. 곧 파이썬 sum() 함수에 대해 배우겠지만, 먼저 다른 접근 방식들을 살펴보겠습니다. 여기에는 다음 방법들이 포함됩니다.
- 단순
for반복문 사용 functools모듈의reduce()함수 활용- 사용자 정의 함수 정의
반복문 사용
리스트의 모든 요소의 합을 구하기 위해 다음과 같이 for 반복문을 사용할 수 있습니다.
- 총합을 저장할 변수를 0으로 초기화합니다.
- 숫자 리스트를 순회하며 각 숫자에 접근합니다.
- 접근한 숫자를 총합 변수에 더합니다.
>>> nums = [2, 8, 5, 3, 11, 7, 9]
>>> total = 0
>>> for num in nums:
... total += num
...
>>> total
45
reduce() 함수 사용
반복 가능한 객체의 합을 구하는 또 다른 방법은 reduce() 함수를 사용하는 것입니다. 파이썬의 functools 모듈에 포함된 reduce() 함수는 함수와 반복 가능한 객체를 인자로 받습니다. 이 함수는 반복 가능한 객체의 요소에 함수를 순차적으로 적용하여 결과를 누적합니다.
여기서는 람다 함수를 사용하여 두 숫자의 덧셈을 정의하고, nums 리스트를 반복 가능한 객체로 전달합니다.
>>> nums = [2, 8, 5, 3, 11, 7, 9]
>>> from functools import reduce
>>> total = reduce(lambda n1, n2: n1 + n2, nums)
>>> total
45
reduce() 함수는 왼쪽부터 시작하여 두 개의 숫자를 순차적으로 더해나가면서 단일 총합 값으로 줄여나갑니다.

사용자 정의 함수 사용
사용자 정의 함수를 정의하여 같은 작업을 수행할 수도 있습니다. 여기서는 sum_list라는 함수를 다음과 같이 정의합니다.
- 숫자 리스트를 인자로 받아
- 리스트 내 요소들의 합을 반환합니다.
함수 본문은 앞에서 본 반복 구조를 사용합니다. 함수를 정의하면 코드를 재사용할 수 있다는 장점이 있습니다.
>>> def sum_list(some_list):
... total = 0
... for num in some_list:
... total += num
... return total
...
nums를 인자로 사용하여 sum_list() 함수를 호출하면 합계 45가 반환됩니다.
>>> nums = [2, 8, 5, 3, 11, 7, 9]
>>> total = sum_list(nums)
>>> total
45
다음으로 내장된 sum() 함수에 대해 알아보겠습니다. 이 함수는 간결할 뿐만 아니라 여러 반복 가능한 객체 및 데이터 타입과 잘 호환되는 강력한 기능을 제공합니다.
파이썬 sum() 함수의 구문
sum() 함수를 사용하는 구문은 다음과 같습니다.
sum(iterable, start)
여기서,
iterable은 필수 인자입니다. 리스트나 숫자 튜플처럼 합산 연산이 가능한 모든 반복 가능한 객체가 될 수 있습니다. 만약 파이썬 문자열로sum()함수를 호출하면TypeError예외가 발생합니다 (자세한 내용은 뒤에서 다룹니다).start는 선택적인 인자입니다. 주로 계산된 합계에 추가되는 숫자 값을 의미합니다. 결과에 상수 값을 더해야 할 때 유용합니다.
이제 파이썬 sum() 함수의 구문을 배웠으니, 이를 사용하여 다양한 반복 가능한 객체를 합산해 보겠습니다.
sum() 함수로 반복 가능한 객체 합산하기

#1. 리스트
sum() 함수를 사용하여 nums 리스트에 있는 숫자들의 합을 구해봅시다.
>>> nums = [2, 8, 5, 3, 11, 7, 9]
>>> sum_1 = sum(nums)
>>> sum_1
45
선택적 시작 값 사용
합계에 상수 값을 추가하려면 선택적 시작 값과 함께 sum() 함수를 사용할 수 있습니다. 여기서는 시작 값으로 100을 위치 인자로 전달합니다.
>>> sum_start = sum(nums, 100)
>>> sum_start
145
시작 값은 키워드 인자로도 지정할 수 있습니다.
>>> sum_start = sum(nums, start=10)
>>> sum_start
55
#2. 튜플
sum() 함수는 튜플과도 호환됩니다. nums 리스트를 튜플로 변환하여 nums_tuple을 만듭니다.
>>> nums_tuple = tuple(nums)
>>> nums_tuple
(2, 8, 5, 3, 11, 7, 9)
>>> sum_2 = sum(nums_tuple)
>>> sum_2
45
#3. 세트
숫자 세트와 함께 sum() 함수를 사용할 수도 있습니다.
>>> nums_set = set(nums)
>>> nums_set
{2, 3, 5, 7, 8, 9, 11}
여기서 nums 리스트를 파이썬 세트로 변환하고, nums_set의 요소들의 합계를 계산합니다.
>>> sum_3 = sum(nums_set)
>>> sum_3
45
#4. 딕셔너리
숫자 키를 가진 다음 students_dict를 고려해 봅시다. 이 딕셔너리를 인자로 사용하여 sum() 함수를 호출하면 어떤 결과가 발생하는지 확인해 봅시다.
>>> students_dict = {1: 106, 2: 112, 3: 127}
>>> sum_4 = sum(students_dict)
>>> sum_4
6
sum() 함수는 기본적으로 딕셔너리의 키 값들을 더한 값을 반환합니다.
키 값 합산
기본 동작이 딕셔너리의 키를 합산한다는 것을 알 수 있습니다.
하지만 딕셔너리 메서드인 keys()를 사용하여 키에 접근하면 좀 더 명확하게 나타낼 수 있습니다. 그런 다음 키 리스트를 sum() 함수에 전달합니다.
>>> sum_keys = sum(students_dict.keys())
>>> sum_keys
6
값 합산
딕셔너리의 값을 합산하려면 딕셔너리 객체에서 values() 메서드를 호출하여 값에 접근해야 합니다.
>>> sum_vals = sum(students_dict.values())
>>> sum_vals
345
다른 숫자 데이터 타입과 함께 파이썬 sum() 함수 사용

지금까지 sum() 함수를 정수형 반복 가능한 객체와 함께 사용하는 방법을 알아보았습니다. 이제 다른 숫자 데이터 타입에 대한 몇 가지 예제를 살펴보겠습니다.
복소수
sum() 함수는 복소수를 합산하는 데에도 사용할 수 있습니다. 다음 예시에서 nums_c는 복소수 리스트입니다.
>>> nums_c = [3 + 4j, 1 + 2j]
>>> sum_c = sum(nums_c)
>>> sum_c
(4+6j)
부동 소수점 숫자
여기서는 sum() 함수를 사용하여 부동 소수점 숫자 리스트인 nums_f를 합산합니다.
>>> nums_f = [1.8, 2.5, 3.6, 7.2]
>>> sum_f = sum(nums_f)
>>> sum_f
15.100000000000001
📑 부동 소수점 숫자를 더한 결과의 정밀도를 높이려면 math 모듈의 fsum() 함수를 사용하여 반복 가능한 객체를 부동 소수점 값으로 합산할 수 있습니다.
sum() 함수로 평탄화
이제 sum() 함수를 사용하여 반복 가능한 객체들을 병합하고 연결하는 방법을 살펴보겠습니다.
리스트 병합
중첩된 리스트가 있다고 가정해 봅시다.
>>> lists = [[2, 4, 6], [3, 5, 7]]
시작 값으로 빈 리스트와 함께 이 중첩된 리스트를 인자로 전달하여 sum() 함수를 호출하면:
>>> sum(lists, [])
[2, 4, 6, 3, 5, 7]
이제 중첩된 리스트가 단일 숫자 리스트로 평탄화되었음을 확인할 수 있습니다.
다르게 생각하면, 리스트가 l3 = [l1, l2] 형식일 때, sum() 함수는 리스트 l3 내에 중첩된 두 개의 리스트 l1과 l2를 연결합니다.
📝 간단한 연습으로 다른 중첩된 반복 가능한 객체에서 sum() 함수를 사용해 보세요.
일반적인 함정: 파이썬 sum() 함수를 문자열과 함께 사용하지 마세요.
sum() 함수를 사용하여 리스트(및 튜플과 같은 다른 반복 가능한 객체)를 병합하고 연결하는 데 사용할 수 있는 것을 보았기 때문에, 문자열을 연결하는 데에도 사용할 수 있다고 생각하고 싶을 수 있습니다.
하지만 그렇게 시도하면 TypeError가 발생합니다.
>>> sum(['a', 'b', 'c'], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: sum() can't sum strings [use ''.join(seq) instead]
따라서 sum() 함수는 문자열을 합산(또는 연결)하는 데 사용할 수 없습니다.
하지만 위의 오류 메시지에서 알 수 있듯이, join() 메서드를 사용하여 문자열 리스트를 단일 문자열로 연결할 수 있습니다.
>>> ''.join(['a', 'b', 'c'])
'abc'
결론
이 튜토리얼에서는 내장된 sum() 함수를 사용하여 반복 가능한 객체 내 모든 요소의 합을 구하는 방법을 배웠습니다. sum() 함수의 일반적인 구문은 sum(iterable, start)이며, 여기서 iterable은 필수 인자이고 start는 선택적 인자입니다.
그 다음 리스트, 튜플, 세트 및 딕셔너리 같은 반복 가능한 객체와 함께 sum() 함수를 사용하는 방법을 이해하기 위해 몇 가지 예제를 코딩했습니다. 마지막으로, sum() 함수가 파이썬 문자열을 제외하고 반복 가능한 객체를 병합하고 연결하는 데 어떻게 사용되는지 살펴보았습니다.
이 튜토리얼이 도움이 되었기를 바랍니다. 다음으로 파이썬의 지도 함수에 대한 이 튜토리얼을 확인해 볼 수 있습니다.