WeniVooks

검색

견고한 파이썬

비교연산

1. 비교연산자

비교 연산자는 두 값을 비교하여 그 결과가 참(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'

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

class int(int):
    def __eq__(self, other):
        return True
 
# 10 < 11
int('10') == int('11')
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)
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
{"packages":["numpy","pandas","matplotlib","lxml"]}
5.1 산술연산5.3 논리연산