1 분 소요

이 글이 글을 참고했다.

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을 비교했을 때, 66이 같다.
그렇다면 두 번째 요소인 50을 비교한다.
이 때 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))를 통해 그 중에서도 최솟값 하나를 구할 수 있는 것이다.



💛 개인 공부 기록용 블로그입니다. 👻

맨 위로 이동하기

태그:

카테고리:

업데이트: