一、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/zh-hk/n/147452.html