23.5 리스트의 가장 작은 수, 가장 큰 수, 합계 구하기

이번에는 리스트(튜플)에 저장된 값 중에서 가장 작은 수, 가장 큰 수, 요소의 합계 구해보겠습니다. 먼저 가장 작은 수와 가장 큰 수는 어떻게 구할까요? 앞에서 반복문을 배웠으니 요소를 모두 반복하면서 숫자를 찾아내 보겠습니다.

>>> a = [38, 21, 53, 62, 19]
>>> smallest = a[0]
>>> for i in a:
...     if i < smallest:
...         smallest = i
...
>>> smallest
19

먼저 리스트 a의 첫 번째 요소를 변수 smallest에 저장합니다. 그리고 for로 리스트의 요소를 모두 반복하면서 ismallest보다 작으면 smallesti를 할당합니다. 즉, 숫자를 계속 비교해서 숫자가 작으면 smallest를 바꾸는 방식입니다.

가장 큰 수는 부등호를 반대로 만들면 되겠죠?

>>> a = [38, 21, 53, 62, 19]
>>> largest = a[0]
>>>for i in a:
...     if i > largest:
...         largest = i
...
>>> largest
62

리스트의 숫자를 계속 비교해서 숫자가 크면 largest를 바꾸는 방식입니다. 그런데 이렇게 forif를 사용해서 가장 작은 수와 가장 큰 수를 찾으려니 좀 번거롭습니다. 다른 방법이 없을까요?

앞에서 리스트를 정렬하는 sort 메서드를 배웠습니다. 리스트를 작은 순서대로 정렬(오름차순)하면 첫 번째 요소가 가장 작은 수입니다. 반대로 큰 순서대로 정렬(내림차순)하면 첫 번째 요소가 가장 큰 수가 되겠죠?

>>> a = [38, 21, 53, 62, 19]
>>> a.sort()
>>> a[0]
19
>>> a.sort(reverse=True)
>>> a[0]
62

더 간단한 방법이 있습니다. 파이썬에서 제공하는 min, max 함수를 사용하면 됩니다.

>>> a = [38, 21, 53, 62, 19]
>>> min(a)
19
>>> max(a)
62
min은 리스트(튜플)에서 가장 작은 값을 구하고, max는 가장 큰 값을 구합니다.

이번에는 리스트에서 요소의 합계를 구해보겠습니다. 합계를 구할 때도 반복문을 사용할 수 있겠죠?

>>> a = [10, 10, 10, 10, 10]
>>> x = 0
>>> for i in a:
...     x += i
...
>>> x
50

변수 x에 0을 할당하고, 반복문으로 리스트의 요소를 모두 반복하면서 요소를 x에 계속 더해주면 됩니다. 이때 x에는 반드시 0을 할당해야 합니다. 그렇지 않으면 없는 변수에 값을 더하게 되므로 에러가 발생합니다. 그리고 0부터 시작해서 숫자를 더해야 제대로 된 합계가 구해지겠죠?

이 방법도 좀 번거롭습니다. 파이썬에서는 합계를 구하는 sum 함수를 제공합니다.

>>> a = [10, 10, 10, 10, 10]
>>> sum(a)
50

이처럼 sum에 리스트을 넣어서 간단하게 요소의 합계를 구할 수 있습니다.

지금까지 설명한 min, max, sum에는 리스트뿐만 아니라 모든 반복 가능한 객체(iterable)를 넣을 수 있습니다. 반복 가능한 객체는 리스트, 튜플, 딕셔너리, 세트, range 등 여러 가지가 있으며 이 부분은 '41.1 반복 가능한 객체 알아보기'에서 자세히 설명하겠습니다.