본문 바로가기

비교연산

1. 비교연산자

비교 연산자는 두 값을 비교하여 그 결과가 참(True)인지 거짓(False)인지를 판단하는 연산자입니다. 이 연산자들은 주로 조건문이나 반복문에서 조건을 검사할 때 사용됩니다.

연산자의미예시
==같음5 == 5 → True
!=같지 않음5 != 3 → True
<작음3 < 5 → True
<=작거나 같음5 <= 5 → True
>큼6 > 5 → True
>=크거나 같음5 >= 5 → True
비교 연산자의 결과는 항상 True 또는 False입니다. 조건문과 반복문에서 흐름을 제어하는 핵심 역할을 합니다.

1.1 == (같음)

두 값이 같으면 True를 반환합니다.

print(5 == 5) # 결과: True
# print(5 = 5) # 잘못된 예시

1.2 != (같지 않음)

  • 두 값이 다르면 True를 반환합니다.
print(5 != 3) # 결과: True

1.3 < (작음)

  • 왼쪽 값이 오른쪽 값보다 작으면 True를 반환합니다.
print(3 < 5) # 결과: True

1.4 <= (작거나 같음)

  • 왼쪽 값이 오른쪽 값보다 작거나 같으면 True를 반환합니다.
print(5 <= 5) # 결과: True

1.5 > (큼)

  • 왼쪽 값이 오른쪽 값보다 크면 True를 반환합니다.
print(6 > 5)  # 결과: True

1.6 >= (크거나 같음)

  • 왼쪽 값이 오른쪽 값보다 크거나 같으면 True를 반환합니다.
print(5 >= 5) # 결과: True

2. 다양한 활용

숫자뿐만 아니라 문자열, 리스트, 튜플 등도 비교할 수 있습니다. 문자열과 시퀀스 자료형은 앞에서부터 한 칸씩 짝을 지어 비교하다가, 처음으로 달라지는 자리에서 승부가 갈립니다. 이를 사전식 비교라고 합니다.

문자를 비교할 때는 유니코드 번호를 기준으로 삼습니다.

print('apple' < 'banana') # 결과: True

위처럼 알파벳은 구분하기가 쉽지만 한글은 쉽지 않습니다. 유니코드표에서 하는 D558번째에 있으며 후는 D6C4번째에 있습니다.

print('하하' > '후후') # 결과: False

아래처럼 연속적인 비교도 가능합니다.

x = 10
print(5 < x < 15) # 결과: True

복잡한 조건: 논리 연산자(and, or, not)와 함께 사용하여 복잡한 조건을 생성할 수 있습니다.

3. 나아가기

아래처럼 리스트의 비교는 맨 앞자리를 비교합니다.

[10, 20, 30] > [20, 30, 40] # False

아래처럼 같은 시퀀스형 자료형이라도 타입이 다르면 비교가 가능하지 않습니다.

[10, 20, 30] > (20, 30, 40) # error

맨 앞자리가 같으면 그 다음 자리로 넘어가며 비교를 해나갑니다.

'abcde' > 'abcda' # True

비교하던 문자가 한쪽에서 먼저 떨어지면, 길이가 더 긴 쪽이 큰 값으로 취급됩니다. 아래에서 'abcd'는 'abcda'와 네 번째 자리까지 같지만 거기서 끝나므로 더 작은 값입니다.

'abcd' > 'abcda' # 결과: False

이러한 비교연산, 산술연산은 모두 class에서 구현이 되어 있습니다.

class int(int):
    def __eq__(self, other):
        return True

# 10 < 11
int('10') == int('11')
class int(int):
    def __add__(self, other):
        return self * other

# 10 + 11
int(10) + int(11)

4. 부동소수점의 비교

이 부동소수점 수를 직접 비교하려고 하면 문제가 생길 수 있습니다. 그래서 파이썬에서는 math.isclose()라는 특별한 함수를 제공하여 이런 문제를 해결할 수 있게 도와줍니다. 이 함수는 두 수가 충분히 가까운지를 확인해줍니다.

import math

result = 0.1 + 0.2
print(result == 0.3)              # False
print(math.isclose(result, 0.3))  # True
print(math.isclose(result, 0.29)) # False
print(math.isclose(result, 0.31)) # False
print(math.isclose(result, 0.30000001)) # False
비교연산 - 견고한 파이썬 | 위니버시티