1 분 소요


python max 함수의 매개변수

max의 매개변수

  • max(iterable, *, key=None)
  • max(iterable, *, default, key=None)
  • max(arg1, arg2, *args, key=None)

iterable에서 가장 큰 항목 또는 두 개 이상의 매개변수 중 가장 큰 항목을 반환한다.
하나의 매개변수가 주어지면 iterable이어야 한다.

In [1]:
max(1, 3, 7, 200, 99, 4, 1125, 9)
Out [1]:
1125
In [2]:
lst = [1, 3, 7, 200, 99, 4, 1125, 9]
max(lst)
Out [2]:
1125
  • 선택적 매개변수 key
    list.sort()에서 사용한 것과 같이 단일 매개변수의 정렬 기준이 되는 함수를 지정한다.
In [3]:
lst = [('A',334), ('B',23), ('C',993), ('D',8)]
max(lst, key=lambda x:x[1])
Out [3]:
('C', 993)
  • 선택적 매개변수 default
    이 포스트를 작성한 이유이다.
    제공된 iterable이 비었을 경우 반환할 객채를 지정한다.
    빈 iterable이 제공되고 default가 비었을 경우 ValueError가 발생한다.
In [4]:
lst = []
max(lst)
Out [4]:

---------------------------------------------------------------------------

ValueError Traceback (most recent call last)

Cell In[4], line 2 1 lst = [] ----> 2 max(lst)

ValueError: max() arg is an empty sequence

In [5]:
lst = []
max(lst, default=0)
Out [5]:
0

예제문제

프로그래머스 땅따먹기

위의 문제를 해결하기 위한 코드를 작성하다가 슬라이싱한 리스트에서 최대값을 구하려고 했다.
하지만 어떤 경우에 슬라이싱한 리스트가 비어있는 경우도 있어서 max()를 사용할 경우 ValueError가 발생했다.
빈 리스트가 생기지 않게 리스트들을 합치는 과정을 넣어도 되지만 새 리스트를 만드는 것은 리소스 낭비이므로 max()에서 해결해보고자 찾아봤다.

In [6]:
lst = [[1, 2, 3, 5], [5, 6, 7, 8], [4, 3, 2, 1]]

# 특정 index(j)에 해당하는 값을 제외한 값들 중에 max
for i in range(1, len(lst)):
    for j in range(4):
        print(f'제외idx:{j}, {i}번째 줄의 max값:{max(max(lst[i-1][:j], default=0), max(lst[i-1][j+1:], default=0))}')
Out [6]:
제외idx:0, 1번째 줄의 max값:5
제외idx:1, 1번째 줄의 max값:5
제외idx:2, 1번째 줄의 max값:5
제외idx:3, 1번째 줄의 max값:3
제외idx:0, 2번째 줄의 max값:8
제외idx:1, 2번째 줄의 max값:8
제외idx:2, 2번째 줄의 max값:8
제외idx:3, 2번째 줄의 max값:7

Reference

댓글남기기