一、cmp函数基本概念
在Python 2.x版本中,cmp为内置函数,可以比较两个对象的大小关系,用于排序和比较操作中。cmp(a, b)会返回一个整数:
- 如果a<b,返回负整数
 - 如果a==b,返回0
 - 如果a>b,返回正整数
 
在Python 3.x版本中,cmp已经被删除
def cmp(a, b):
    return (a > b) - (a < b)
二、cmp函数的基本用法
使用cmp函数需要注意几点:
- cmp函数只能比较数字和字符串类型
 - 在Python2.x版本中,cmp函数的返回值可以直接用于sorted或sort函数的比较操作中,但在Python3.x中,需要使用key参数
 - 在Python3.x中,强制转换为比较函数也可以解决问题
 
下面是使用cmp比较数字和字符串的例子:
#比较数字类型(Python2.x和Python3.x)
print(cmp(10, 5))
print(cmp(5, 10))
print(cmp(5, 5))
#比较字符串类型(Python2.x和Python3.x)
print(cmp("a", "b"))
print(cmp("b", "a"))
print(cmp("a", "a"))
三、使用cmp进行高级排序
使用cmp进行高级排序,需要给定key参数以及cmp函数。下面是一个使用cmp进行高级排序的例子:
students = [("Tom", 19), ("Jack", 18), ("Lily", 20), ("Lucy", 22)]
#按照年龄从小到大排序
students.sort(cmp=lambda x, y: cmp(x[1], y[1]))
print(students)
#按照年龄从大到小排序
students.sort(cmp=lambda x, y: cmp(y[1], x[1]))
print(students)
四、使用cmp进行自定义对象排序
通过自定义对象的cmp函数,可以使用cmp进行自定义对象排序。下面是一个使用cmp进行自定义对象排序的例子:
class Person(object):
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def __str__(self):
        return "{},{}".format(self.name,self.age)
    def __cmp__(self, other):
        if self.age  other.age:
            return 1
        else:
            return 0
persons = [Person("Tom", 19), Person("Jack", 18), Person("Lily", 20), Person("Lucy", 22)]
#按照年龄从小到大排序
persons.sort()
for p in persons:
    print(p)
#按照年龄从大到小排序
persons.sort(reverse=True)
for p in persons:
    print(p)
五、小结
cmp函数可以进行数字和字符串的比较,并且可以用于高级排序和自定义对象排序中。但是,注意cmp在Python3.x版本中已经被删除,需要使用key参数或者比较函数替代。
原创文章,作者:OFWJ,如若转载,请注明出处:https://www.506064.com/n/147452.html
微信扫一扫 
支付宝扫一扫