본문 바로가기

컴퓨터/파이썬 공부정리

[Python] max(str, ...)에 대해서

보통 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

 

문자열의 맨 앞부분만 비교하여 유니코드 값이 큰 것을 비교하고 큰 값을 포함하고 있는 문자열을 출력한다. 

단, 자료형이 다를 경우 비교할 수 없고 에러가 발생하므로 주의한다.

 

참고:

https://stackoverflow.com/questions/20463204/how-does-the-max-function-work-on-list-of-strings-in-python

 

How does the max() function work on list of strings in python?

I have a list: list1 = [123, 'xyz', 'zara', 'abc'] print "Max value element : ", max(list1); It gives: Max value element : zara Please also explain how it perform comparison on list of strings...

stackoverflow.com