[Python] 2차원 리스트의 최솟값, 최댓값 구하기
평소에 리스트에서 최솟값과 최댓값을 구해야할 때 파이썬의 내장 함수인 min()
, max()
함수를 사용하였다.
오늘 알고리즘 문제를 풀던 중 2차원 리스트에서 최솟값과 최댓값을 구해야해서 별 생각없이 min()
, max()
을 사용했는데 내 생각과는 다른 결과가 나왔다.😭
다음과 같이 2차원 리스트가 있을 때, min_val = min(data)
, max_val = max(data)
로 최솟값과 최댓값을 구하려고 했다.
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(data)
max_val = max(data)
의도한 결과는
min_val: 2
max_val: 9
였지만 실행 결과는 다음과 같았다.
min_val: [3, 2, 3, 4, 6]
max_val: [8, 9, 5, 2, 7]
알고보니
- 1차원 리스트에서
min()
은 가장 작은 원소,max()
는 가장 큰 원소이지만, - 2차원 리스트에서
min()
은 원소 합이 가장 작은 1차원 리스트,max()
는 원소 합이 가장 큰 1차원 리스트였다.
그래서 2차원 리스트인 data
의 min()
과 max()
가 각각 원소합이 18인 리스트인 [3, 2, 3, 4, 6]
, 원소합이 31인 [8, 9, 5, 2, 7]
이 되는 것이다.
그러면 2차원 리스트에서 최솟값 하나, 최댓값 하나를 어떻게 구해야 할까?
물론 for
문을 이용하여 이용할 수도 있겠지만, map
을 이용한다면 min
, max
를 이용해 최솟값, 최댓값 하나를 구할 수 있다!
그 방법을 알아보기 전에 min(), max(), map
을 제대로 정리해보자!
[ min(), max(), map()
]
1. min()
iterable
에서 가장 작은 항목이나 두 개 이상의 인자 중 가장 작은 것을 돌려준다.
예제
data = [4, 2, 9, 3]
data2 = [1, 5, 4, 2]
data3 = [9, 7, 5, 8]
print(min(data)) # 2
print(min(7, 2)) # 2
print(max(data, data2, data3]) # [1, 5, 4, 2]
2. max()
iterable
에서 가장 큰 항목이나 두 개 이상의 인자 중 가장 큰 것을 돌려준다.
예제
data = [4, 2, 9, 3]
data2 = [1, 5, 4, 2]
data3 = [9, 7, 5, 8]
print(max(data)) # 9
print(max(7, 2)) # 7
print(max(data, data2, data3)) # [9, 7, 5, 8]
3. map()
iterable
을 받아서, 각 요소에 함수를 적용해주는 함수이다.
map(적용시킬함수, 적용할 요소들))
- 출력 결과는
iterator
이기 때문에 보통list
타입으로 형변환해서 사용한다.
예제
data = [1, 2, 3, 4]
print(list(map(str, data))) # ['1', '2', '3', '4']
int
형 데이터로 이루어져 있던 data
를 map
을 이용하여 모두 str
형으로 바꿨다.
[ 2차원 리스트 최솟값, 최댓값 구하기 ]
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
위와 같이 max
를 이용하면 min
과 max
를 이용하여 2차원 리스트의 최솟값과 최댓값을 구할 수 있다.
단계별로 한 번 살펴보자!
a = list(map(min, data))
b = list(map(max, data))
print(a) # [2, 2, 2, 2, 2]
print(b) # [8, 6, 7, 7, 9]
map
을 이용하여
a
에는data
의min
값을 추출하여 저장하고.b
에는data
의max
값을 추출하여 저장한다.
그래서 a
와 b
를 각각 출력하면
a
는 각 줄에서의 최솟값을 추출한 리스트인[2, 2, 2, 2, 2]
가 출력되고b
는 각 줄에서의 최댓값을 추출한 리스트인[8, 6, 7, 7, 9]
가 출력된다.
min_val = min(a) # min(map(min, data))와 동일하다.
max_val = max(b) # max(map(max, data))와 동일하다.
print(min_val)
print(max_val)
다시 min
과 max
를 이용하여 그 중에서의 min
값과, max
값을 추출하면 된다!
min_val
은[2, 2, 2, 2, 2]
중 최솟값인2
가 출력된다.max_val
은[8, 6, 7, 7, 9]
중 최댓값인9
가 출력된다.
[ 참고자료 ]
https://devbull.xyz/python-2caweon-baeyeolyi-coedaegabs-coesogabs-cajgi/
https://docs.python.org/ko/3/library/functions.html
https://wikidocs.net/22803
Author And Source
이 문제에 관하여([Python] 2차원 리스트의 최솟값, 최댓값 구하기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mmy789/Python-2차원-리스트의-최솟값-최댓값-구하기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)