一、什麼是cmp函數?
在Python 2中,有一個名為cmp(比較)的內置函數,它接受兩個值作為參數,並返回一個指示其大小關係的整數。cmp函數的返回值為0表示相等,為正整數表示第一個數大於第二個數,為負整數表示第一個數小於第二個數。
例如,以下代碼演示了兩個字元串的比較:
>>> cmp('cat', 'dog')
-1
>>> cmp('apple', 'apple')
0
>>> cmp('zebra', 'giraffe')
1
在進行比較時,cmp函數在兩個對象之間進行一個類似於「小於、大於或等於」的比較操作。此比較操作的結果告訴了我們要特定的對象的大小關係。這些比較函數常被用於排序、搜索以及其他與序列相關的操作中。
二、排序演算法中的cmp函數的作用
Python中內置的排序演算法函數sorted()和sort()函數都可以接受一個可選參數cmp。這個參數指定了比較函數,使得排序順序發生變化。
以sort()函數為例:
>>> a = [7, 2, 5, 1, 8, 4]
>>> a.sort()
>>> print(a)
[1, 2, 4, 5, 7, 8]
這裡沒有指定任何的參數cmp,sort()默認會使用Python對象中的「<」運算符進行比較。 如果我們想使用其他的方式進行比較時,就需要用到cmp函數了。比如,如果我們有一個字元串列表和它們的長度列表時,我們可以用長度列表來排序字元串列表。
>>> str_list = ['pear', 'apple', 'banana', 'orange', 'lemon']
>>> str_len_list = [len(s) for s in str_list]
>>> sorted(str_list, key=lambda x:x[0])
['apple', 'banana', 'lemon', 'orange', 'pear']
上述代碼中,首先根據字元串列表中每個字元串的長度生成一個長度列表,然後使用sorted()函數結合lambda表達式指定排序規則,使得排序結果按照字元串列表的長度進行排序,輸出為[‘pear’, ‘apple’, ‘banana’, ‘orange’, ‘lemon’]。
三、如何使用cmp函數進行排序
Python 3中的排序函數sorted()和list.sort()不再支持cmp函數作為參數。那麼對於Python 2中支持cmp函數的情況,我們該如何使用呢?
使用cmp函數時,參照以下通用格式:
def cmp_function(x, y):
if x y:
return 1
else:
return 0
在這種形式下,對於x,y的關係,返回 -1 表示xy。
我們可以自定義cmp_function函數,來確定需要排序的元素的順序。比如以下代碼演示了按照字元串的長度升序排序:
>>> str_list = ['pear', 'apple', 'banana', 'orange', 'lemon']
>>> str_list.sort(cmp=lambda x,y: cmp(len(x), len(y)))
>>> print(str_list)
['pear', 'apple', 'banana', 'orange', 'lemon']
另外,我們還可以用lambda表達式的方式來寫排序規則:
>>> str_list = ['pear', 'apple', 'banana', 'orange', 'lemon']
>>> str_list.sort(cmp=lambda x,y: cmp(len(x), len(y)))
>>> print(str_list)
['pear', 'apple', 'banana', 'orange', 'lemon']
四、總結
cmp函數是Python內置函數之一,其可用於比較兩個元素的大小關係並返回比較結果。在排序演算法中,cmp函數通常用於定義元素之間的順序,以便進行排序操作。在Python 3中,sorted()和list.sort()沒有了cmp函數的支持,代之以lambda表達式來定義排序規則。
原創文章,作者:XFMCA,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/329634.html