파이썬은 list끼리 크기 비교가 가능하다.
같은 인덱스끼리 사전식으로 비교한다.
짧은 list의 마지막 인덱스까지 크기가 같다면, 길이가 짧은 쪽을 작다고 판단한다.
같은 인덱스에 있는 두 값의 type이 다르면 error가 발생한다.
따라서 list의 요소의 type을 하나로 통일시켜야 비교하기 좋다.
흔한 경우는 아니지만 type이 섞인 list라도 같은 인덱스끼리 type이 같으면 비교 가능하다..
# 파이썬의 리스트 대소 비교
# 리스트는 사전식(lexicographical) 비교를 통해 대소를 판단합니다.
# 각 요소를 차례로 비교하며 결정이 나면 비교를 종료합니다.
# 1. 기본 비교 예제
a = [1, 2, 3]
b = [1, 2, 4]
c = [1, 2]
d = [1, 2, 0]
print(a < b) # True: 세 번째 요소에서 3 < 4
print(a > b) # False: 세 번째 요소에서 3 < 4
print(c < d) # True: 세 번째 요소 비교 시 c는 더 짧아서 작다고 간주
# 2. 요소 타입이 같아야 비교 가능
x = [1, 2]
y = [1, "apple"]
try:
print(x < y) # TypeError 발생
except TypeError as e:
print(f"TypeError: {e}")
# 3. 타입이 다른 경우 문자열끼리 비교
# 문자열과 숫자가 혼합된 리스트도 요소별로 비교 가능하다면 에러 없이 작동
x_mixed = [1, "10", 3]
y_mixed = [1, "2", 3]
print(x_mixed > y_mixed) # False: '10' < '2' 이므로 False
print(x_mixed < y_mixed) # True: '10' < '2' 이므로 True
# 문자열 사전식 비교 확인
print('10' < '2') # True: '1' < '2'로 판단
print('10' > '2') # False
# 숫자로 변환 후 비교
x_mixed_converted = [int(i) if isinstance(i, str) else i for i in x_mixed]
y_mixed_converted = [int(i) if isinstance(i, str) else i for i in y_mixed]
print(x_mixed_converted > y_mixed_converted) # True: [1, 10, 3] > [1, 2, 3]
print(x_mixed_converted < y_mixed_converted) # False