Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

파이썬 cmp() 함수 완벽 가이드 – 두 정수 비교부터 홀짝 판별까지


cmp() 함수란?

cmp()는 두 개의 정수를 비교하는 파이썬 내장 함수로, 원래 파이썬 2에서 기본적으로 제공되었습니다. 비교 결과는 다음과 같습니다.

  • 첫 번째 정수가 두 번째보다 작으면 -1 반환
  • 첫 번째 정수가 두 번째보다 크면 1 반환
  • 두 값이 같으면 0 반환

참고로 파이썬 3에서는 cmp()가 표준에서 제거되었기 때문에, 아래 예제처럼 동일한 기능을 하는 함수를 직접 정의해서 사용해야 합니다. 핵심 아이디어는 간단합니다. 불리언 값 TrueFalse는 산술 연산에서 각각 10으로 취급되므로, (x > y) - (x < y)라는 한 줄의 식만으로 세 가지 비교 결과를 모두 표현할 수 있습니다.

예제

아래 예제는 다양한 상황에서 cmp() 메서드를 활용하는 방법을 보여줍니다.

def cmp(x, y):
    return (x > y) - (x < y)

# x > y인 경우
x, y = 5, 3
print(f"x > y일 때 cmp 값 : {cmp(x, y)}\n")

# x < y인 경우
x, y = 7, 9
print(f"x < y일 때 cmp 값 : {cmp(x, y)}\n")

# x = y인 경우
x, y = 13, 13
print(f"x = y일 때 cmp 값 : {cmp(x, y)}")

# 홀수·짝수 판별
k = 16
if cmp(0, k % 2):
    print(f"\n주어진 숫자 {k}은(는) 홀수입니다.")
else:
    print(f"\n주어진 숫자 {k}은(는) 짝수입니다.")

k = 31
if cmp(0, k % 2):
    print(f"\n주어진 숫자 {k}은(는) 홀수입니다.")
else:
    print(f"\n주어진 숫자 {k}은(는) 짝수입니다.")

실행 결과

위 코드를 실행하면 다음과 같은 결과가 출력됩니다.

x > y일 때 cmp 값 : 1

x < y일 때 cmp 값 : -1

x = y일 때 cmp 값 : 0

주어진 숫자 16은(는) 짝수입니다.

주어진 숫자 31은(는) 홀수입니다.

코드 설명

마지막 부분의 홀수·짝수 판별 로직 역시 cmp()를 응용한 것입니다. 어떤 수 k를 2로 나눈 나머지(k % 2)는 홀수일 때 1, 짝수일 때 0입니다. 따라서 cmp(0, k % 2)는 나머지가 1(홀수)일 때 -1을 반환해 조건문이 참이 되고, 나머지가 0(짝수)일 때 0을 반환해 거짓이 됩니다.

파이썬 3 환경이라면 위와 같이 직접 정의한 cmp()를 그대로 사용할 수 있으며, 정렬 시 비교 함수가 필요하다면 표준 라이브러리의 functools.cmp_to_key()를 활용하는 것도 좋은 대안입니다.