프로그래밍을 하다 보면 하나의 문장 안에서 두 개 이상의 조건을 동시에 검사해야 하는 경우가 자주 발생합니다. 이럴 때 사용할 수 있는 기본 문법으로는 x < y < z처럼 조건을 이어 쓰는 방식과, x < y and x < z처럼 논리 연산자로 묶는 방식이 있습니다.
파이썬의 기본 비교 연산자
다른 프로그래밍 언어와 마찬가지로 파이썬에도 다양한 비교 연산자가 제공됩니다. 대표적인 비교 연산자는 다음과 같습니다.
<,<=,>,>=: 크기 비교==,!=: 값의 동등성 비교is,is not: 객체의 동일성(identity) 비교in,not in: 멤버십(포함 여부) 검사
비교 연산자의 우선순위
위 연산자들은 서로 우선순위가 모두 같으며, 산술 연산자·비트 연산자·시프트 연산자보다는 낮은 우선순위를 가집니다.
비교 연산자 연결(Chaining)의 원리
파이썬에서는 비교 연산자를 임의로 나열해 하나의 체인(chain)처럼 사용할 수 있습니다. 예를 들어 x < y < z라는 표현식은 x < y and y < z와 완전히 동일하게 평가됩니다.
일반화하면, 피연산자가 p1, p2, ..., pn이고 연산자가 OP1, OP2, ..., OPn-1일 때, 전체 표현식은 다음과 같이 해석됩니다.
p1 OP1 p2 and p2 OP2 p3 and ... and pn-1 OPn-1 pn
즉, 각 피연산자는 자신의 양옆에 있는 연산자와 한 번씩만 비교되며, 중간 값은 단 한 번만 평가된다는 점이 일반적인 and 조건문과의 차이점입니다.
예제 코드 1
a = 10 b = 20 c = 5 # c < a < b 는 c < a and a < b 와 동일 print(c < a) print(a < b) print(c < a < b) # b는 40과 60 사이에 속하지 않음 print(40 <= b <= 60) # a는 10이고, c보다 큼 print(a == 10 > c)
실행 결과
True True True False True
예제 코드 2
u = 5 v = 10 w = 15 x = 0 y = 7 z = 15 # w는 z와 같지만 v와는 다르며, v는 x보다 크고 x는 y보다 작음 print(z is w is not v > x < y) # w와 z가 같은지, 그리고 x < z > y 인지 확인 print(x < w == z > y)
실행 결과
True True
정리
파이썬의 비교 연산자 연결 기능을 활용하면 수학적 부등식처럼 직관적으로 조건을 작성할 수 있어 코드의 가독성이 크게 향상됩니다. 다만 is나 in 같은 연산자가 섞인 복잡한 체인은 의도를 오해하기 쉬우므로, 필요하다면 괄호를 사용하거나 and로 명시적으로 표현하는 것이 좋습니다.