늒네 기록

[python] sum() 함수에 대하여 본문

언어 공부 기록/python

[python] sum() 함수에 대하여

jaeha lee 2020. 9. 24. 00:21

평소에 제일 많이 접하게 되는 sum() 함수 사용법은 다음과 같을 것이다.

l = [1, 2, 3, 4]
print(sum(l)) # 10

이때 sum의 역할은 리스트 l 안에 있는 정수들을 전부 더해준다.

 

그런데, sum에 두번째 인자를 넣을 수 있다. 두 번째 인자는 최초의 변수 역할을 해주는데, 아래의 코드를 보면 좀 더 명확하게 이해할 수 있다.

x = 5
l = [1, 2, 3, 4]
for num in l:
    x+=num
print(x) # 15

y = 5
print(sum(l, y)) # 15
print(y) # 5

 

sum()함수가 주어진 이터레이터에 있는 값들을 모두 더해주는 거라면, +가 정의된 다른 타입들도 넣을 수 있는 것이 아닐까 의문을 가질 수 있다. 예를 들어,

 

1) string

x = '5'
l = ['1', '2', '3', '4']
for c in l:
    x+=c
print(x) # 51234

y = '5'
print(sum(l, y)) # 여기서 TypeError: sum() can't sum strings [use ''.join(seq) instead] 발생
print(y)

흥미롭게도, sum()은 string 타입을 더할 수 없다는 에러가 나온다! 에러에 언급된 join에 대해서는 나중에 다루도록 하고, 다음으로 넘어가보자.

 

2) list

x = [5]
l = [[1], [2], [3], [4]]
for ll in l:
    x+=ll
print(x) # [5, 1, 2, 3, 4]

y = [5]
print(sum(l, y)) # [5, 1, 2, 3, 4]
print(y) # [5]

리스트는 원하는대로 더해진다. 즉, 이를 활용하면 여러 리스트가 주어져있고 이들을 하나로 합치고 싶을때 다음의 방법을 사용할 수 있다.

 

l = [[1, 2, 3], [4, 5, 6], [7], [8, 9]]
print(sum(l,[])) # [1, 2, 3, 4, 5, 6, 7, 8, 9]

빈 리스트에서 시작해서 차례대로 더하는 것이므로 주석에 있는 것과 같은 결과가 나온다.

 

 

반응형
Comments