[Python] 2차원 리스트에서 최솟값, 최댓값 구하기
max(2차원리스트)
, min(2차원리스트)
형태로 구하면 안될까?
❌ 2차원 리스트에 바로 max()
혹은 min()
함수를 적용하면 원하는 결과를 얻을 수 없다.
아래 두 가지 예시를 보자.
data = [[1, 2, 3], [5], [0, 1, 100]]
print(min(data)) # [0, 1, 100]
print(max(data)) # [5]
리스트 원소 합과 원소의 개수와는 상관없이, 리스트의 첫 번째 요소부터 대소 비교를 하여 결과값을 낸다는 것을 확인할 수 있다.
첫 번째 요소부터 대소 비교를 한다는게 무슨 말일까?
아래 또다른 예시를 보자.
data = [[6, 5], [6, 0, 1], [1, 2, 3]]
print(min(data)) # [1, 2, 3]
print(max(data)) # [6, 5]
data 리스트는 3개의 요소를 가지고 있으며, 각 요소는 리스트이다.
우선 min()
의 결과가 [1, 2, 3]
인 이유 먼저 알아보자.
각 요소의 첫 번째 요소인 6
, 6
, 1
을 비교했을 때, 1
이 가장 작은 값이므로 [1, 2, 3]
이 가장 작은 값으로 판단된다.
max()
의 결과가 [6, 5]
인 이유는,
마찬가지로 첫 번째 요소인 6
, 6
, 1
을 비교했을 때, 6
과 6
이 같다.
그렇다면 두 번째 요소인 5
와 0
을 비교한다.
이 때 0
보다 5
가 크기 때문에 [6, 5]
가 더 큰 값으로 판단된다.
2차원 리스트에서 최솟값, 최댓값 구하기
2차원 리스트의 경우 map
함수를 이용해 아래와 같은 방법응로 전체 리스트에서 최솟값, 최댓값을 구할 수 있다.
data = [[6, 8, 2, 6, 2],
[3, 2, 3, 4, 6],
[6, 7, 3, 3, 2],
[7, 2, 5, 3, 6],
[8, 9, 5, 2, 7]]
min_val = min(map(min, data)) # ✅ 2
max_val = max(map(max, data)) # ✅ 9
어떻게 map
을 통해 단 하나의 최솟값을 얻었을까? 🤔
data = [[6, 8, 1, 6, 2],
[8, 9, 5, 4, 6],
[6, 7, 3, 1, 10],
[7, 8, 5, 3, 6],
[8, 9, 5, 0, 7]]
print(list(map(min, data))) # [1, 4, 1, 3, 0]
print(min(map(min, data))) # 0
위 처럼 map(min, data)
를 했을 때 각 행에서의 최솟값이 나온다.
(list()
는 값을 확인하기 위해서 형을 변환한 것이다.)
따라서 min(map(min, data))
를 통해 그 중에서도 최솟값 하나를 구할 수 있는 것이다.
💛 개인 공부 기록용 블로그입니다. 👻