-
[Python] min()/ max() 가이드 : key, default 옵션Programming/Python 2026. 3. 23. 12:33반응형
파이썬의 min()과 max()는 단순히 가장 크고 작은 값을 찾는 것을 넘어서
데이터의 비교 기준 자체를 프로그래머가 마음대로 조작할 수 있는 아주 유연하고 강력한 함수입니다.
이 함수의 숨겨진 동작 원리와 관련 옵션을 살펴 보도록 하겠습니다.
1. 기본 동작 원리 : 숫자와 문자열의 치명적인 차이
min()과 max()에 숫자를 넣으면 우리가 아는 수학적 크기대로 비교하지만, 문자열(String)을 넣으면 '아스키 코드' 값을 기준으로
한 사전순 비교를 수행합니다.
함정 : 문자열 숫자 비교
# 1. 일반 숫자 비교 print(max(10, 2)) # 출력 : 10 (수학적 크기) # 2. 문자열 숫자 비교(첫 글자 비교) print(max("10", "2")) # 출력 : "2"- 왜 "2"가 더 클까요? : 문자열은 무조건 첫 번째 글자부터 하나씩 아스키코드 값을 비교합니다. "10"의 첫 글자인 '1'은 아스키 코드 49이고, "2"의 첫 글자인 '2'는 아스키코드 50입니다. 파이썬은 첫 글자에서 이미 '2'가 더 크다고 판별했으므로, 뒤에 있는 '0'은 쳐다보지도 않고 "2"를 최댓값으로 반환합니다.
알파벳 문자열 비교
print(max("apple", "banana")) # 출력 : "banana" # a 보다 b 의 아스키 코드 값이 더 크기 때문에 banana가 최대입니다.
2. key 매개변수로 비교 기준 창조하기
앞서 살펴본 문자열 비교의 한계를 부수고, 내가 원하는 기준을 파이썬에게 강제할 수 있는 옵션이 바로 key입니다.
key에는 "기준을 만들어낼 함수"를 전달합니다.
1. 문자열 숫자의 함정 탈출 (key = int)
문자열 상태의 숫자를 비교할 때, 아스키코드가 아닌 실제 수학적 크기로 비교하고 싶다면 key=int를 부여합니다.
# 파이썬 내부적으로 10 과 2를 잠시 정수로 변환하여 비교한 뒤, # 원래 데이터인 10을 그대로 반환합니다. print(max("10", "2", key=int)) # 출력 : "10"
2. 절대값, 글자 수 등 다양한 내장 함수 활용
# 절댓값을 기준으로 가장 작은 수 찾기 print(min[-10, 2, 5, -7], key = abs)) # 출력 : 2 # 문자열 길이(len)를 기준으로 가장 긴 단어 찾기 print(max(["apple", "kiwi", "watermelon"], key=len)) # 출력 : "watermelon"3. 람다(lambda)를 활용한 복잡한 구조 탐색
리스트 안에 튜플이나 딕셔너리가 있을 때, 특정 위치의 값을 기준으로 찾습니다.
students = [("Alice", 85), ("Bob", 92), ("Charlie", 78)] # 튜플의 1번째 인덱스(점수)를 기준으로 가장 높은 학생을 찾습니다. print(max(students, key = lambda x : x[1])) # 출력 : ('Bob', 92)
3. 시스템 에러 방지 : default 매개변수
반복문이나 조건문을 돌다 보면 리스트가 텅 비어버리는([]) 상황이 종종 발생합니다.
빈 순회 가능 객체(Iterable)를 max()나 min()에 넣으면 파이썬은 ValueError를 발생시키며 프로그램을 종료해 버립니다.
이때 default 옵션을 사용하면 에러 대신 안전하게 기본값을 반환합니다.
empty_list = [] #print(max(empty_list)) # 에러 발생! 프로그램을 멈춤 #리스트가 비어있다면, 에러를 내지 말고 0을 내보내라는 안전 장치입니다. print(max(empty_list, default=0)) # 출력:0
4. for문과 max() 내장 함수 비교
비교 항목 직접 구현한 for문 탐색 max() 내장 함수 탐색 핵심 기법 순차적 조건 비교(선형 탐색) C언어 레벨의 최적화된 선형 탐색 시간 복잡도 O(N) O(N) 공간 복잡도 O(1) O(1) 코드의 유연성 탐색 중간(break) 등 복합 로직 추가 용이 key 매개변수를 통해 다양한 조건 부여 가능 가독성 코드가 길고 의도 파악 필요 단 한 줄로 명확하게 탐색 의도 전달 가능 반응형'Programming > Python' 카테고리의 다른 글
[python] 문자열 뒤집기의 모든 것 (0) 2026.03.22 [python] 코딩테스트 시간 초과 해결법 : input vs sys.stdin.readline (0) 2026.03.19 [python] print()함수와 옵션들(sep, end 등) (0) 2026.03.10 [python] map() 함수 (0) 2026.03.08