보통 max()에 대해서 설명한다면 다음과 같다.
'iterable한 object를 받아서 그 중 최댓값을 반환하는 내장함수이다.'
하지만 max()는 숫자형 뿐만 아니라 문자열 또한 비교할 수 있는데 이는 다음과 같다.
0. 단일 문자열을 비교할 때
str = 'asdzCda'
print(max(str))
>>> 'z'
print(ord(z))
>>> 122
각 문자의 유니코드에 대하여 유니코드 값이 제일 큰 문자를 반환하여 출력한다.
str = 'asdzCda' 에 대하여 z의 유니코드가 122로 제일 크기 때문에 'z'가 출력되었다.
1. 문자열끼리 비교할 때
str = ['abc', 'abd']
print(max(str))
>>> 'abd'
각 문자열의 맨 앞 부분을 비교하고, 유니코드로 변환했을 때 큰 값을 출력한다.
'abc', 'abd'에서 첫 번째 문자 'a', 두 번째 문자 'b'는 같기 때문에 pass하고 세 번째 문자에서 'c', 'd' 이기 때문에
'abd'를 최댓값으로 한다.
2. 숫자로 이루어진 문자열을 비교할 때
str = ['2000', '888']
print(max(str))
>>> '888'
각 문자열의 맨 앞 부분을 비교하고, 숫자가 큰 것을 최댓값으로 하여 출력한다.
'2000'과 '888'에서 정수형으로 비교한다면 '2000'이 크다. 하지만, 주어진 리스트의 요소는 문자열이고,
맨 앞부분의 '2'와 '8'을 비교했을 때 '8'이 더 크므로 '888'을 출력한다.
3. 숫자로 이루어진 문자열과, 글자로 이루어진 문자열을 비교할 때
str = ['11', 'abc']
print(max(str))
>>> 'abc'
각 문자열 맨 앞 부분을 비교하고, 유니코드로 변환했을 때 그 값이 큰 것을 최댓값으로 하여 출력한다.
주어진 리스트에서, '11', 'abc'를 비교하고자 할 때, 각 문자열의 맨 앞 부분인 '1'과 'a'를 유니코드 값을 비교한다.
print(ord('1'))
>> 49
print(ord('a'))
>> 97
'a'의 유니코드 값이 '1'의 유니코드 값보다 크므로 'abc'를 출력한다.
만약 숫자와 문자열이 혼합되어 있다고 하더라도,
print(max('a1', 'Abc'))
>> 'a1'
print(ord('a'))
>> 97
print(ord('A'))
>> 65
문자열의 맨 앞부분만 비교하여 유니코드 값이 큰 것을 비교하고 큰 값을 포함하고 있는 문자열을 출력한다.
단, 자료형이 다를 경우 비교할 수 없고 에러가 발생하므로 주의한다.
참고:
'컴퓨터 > 파이썬 공부정리' 카테고리의 다른 글
[Python] index() 정리 (0) | 2020.09.01 |
---|---|
[Python] for ~ else, while ~ else를 사용하는 방법 (0) | 2020.08.31 |
[Python] max(str, key=len) (0) | 2020.08.25 |
[Python] 'type hint'가 안될 때 (0) | 2020.08.25 |
[Python] 한권으로 개발자가 원하던 파이썬 심화 A to Z - 1. globals(), vars() (0) | 2020.08.18 |