您的位置:

Python cmp定义及其常见用法

Python内建函数cmp()用于比较两个对象的大小。如果两个对象相等,返回0;如果第一个对象小于第二个对象,返回负数;如果第一个对象大于第二个对象,返回正数。cmp()函数可以用于排序、查找、去重等操作。

一、用法示例

比较数字:


num1 = 10
num2 = 20
print(cmp(num1, num2)) # -1
print(cmp(num2, num1)) # 1
print(cmp(num1, num1)) # 0

比较字符串:


str1 = 'apple'
str2 = 'banana'
print(cmp(str1, str2)) # -1
print(cmp(str2, str1)) # 1
print(cmp(str1, str1)) # 0

比较列表:


list1 = [1, 2, 3]
list2 = [1, 2, 4]
print(cmp(list1, list2)) # -1
print(cmp(list2, list1)) # 1
print(cmp(list1, list1)) # 0

二、其他常见用法

1. 排序

可以利用cmp()函数进行排序。例如,要对一个数字列表进行升序排列:


num_list = [3, 1, 4, 2]
num_list.sort(cmp)
print(num_list) # [1, 2, 3, 4]

也可以自定义比较函数,例如按照绝对值大小进行排序:


def abs_cmp(a, b):
    return cmp(abs(a), abs(b))

num_list = [-3, 1, 4, -2]
num_list.sort(abs_cmp)
print(num_list) # [1, -2, 3, 4]

2. 查找

可以利用cmp()函数进行查找,例如在一个有序列表中查找一个数字:


num_list = [1, 3, 5, 7, 9]
target_num = 5
for i, num in enumerate(num_list):
    if cmp(num, target_num) == 0:
        print('found at index', i)
        break

需注意,此用法只适用于有序列表。如果列表无序,必须先对列表进行排序,再进行查找操作。

3. 去重

可以利用cmp()函数进行去重,例如从一个有重复元素的列表中去重:


num_list = [1, 2, 3, 1, 2, 4]
unique_list = []
for num in num_list:
    if cmp(num, unique_list[-1] if unique_list else None) != 0:
        unique_list.append(num)
print(unique_list) # [1, 2, 3, 4]

三、替代品

在Python3.x版本中已经移除了cmp()函数。如果需要进行比较操作,可以使用rich comparison operators,例如:


num1 = 10
num2 = 20
print(num1 < num2) # True
print(num1 > num2) # False
print(num1 == num2) # False

如果需要进行排序、查找、去重等操作,可以利用sorted()、index()、set()等函数实现。

四、总结

Python内建函数cmp()可用于比较两个对象的大小,应用广泛。在Python3.x版本中已经移除,可使用rich comparison operators、sorted()、index()、set()等函数替代。