1. 程式人生 > 程式設計 >python3中sorted函式裡cmp引數改變詳解

python3中sorted函式裡cmp引數改變詳解

今天在刷leetcode的時候,對於179題返回最大數,用python2中的sorted(cmp)會很方便,但是在python3中這一引數被取消了,經過查詢,發現應該藉助functools中的cmp_to_key函式,直接貼程式碼

import functools
def cmp(a,b):
  if a > b :
    return -1
  elif a < b :
    return 1
  else:
    return 0
    
nums = [1,2,3,4,5,6]
sorted_nums = sorted(nums,key = functools.cmp_to_key(cmp))

Out[30]: [6,1]

但注意需要轉換的cmp函式的返回值必須是0,1,-1

知識點擴充套件:

為什麼Python中sort方法和sorted函式呼叫廢棄使用cmp引數

Python中sort方法和sorted函式老猿在前面一些章節介紹過,具體語法及含義在此不再展開說明,但老猿在前面學習相關內容時,只使用了簡單的案例,對這兩個方法的key引數沒有深入研究,總以為就是以前c語言排序演算法中的cmp函式。今天在研究富比較方法的運用時才發現key根本不是cmp函式,而是一個只針對比較元素自身的函式,不像cmp函式是兩個物件之間比較。
經查閱資料和測試,發現其實早期的Python版本中是提供了cmp函式的,其版本演進沿革如下:

Python2.1以前的排序比較方法只提供一個__cmp__方法,沒有__lt__等6個富比較方法, Python 2.1引入了富比較方法,Python3.4之後作廢了__cmp__方法。相應地從Python2.4開始,list.sort() 和 sorted() 都增加了一個 ‘key' 引數用來在進行比較之前指定每個列表元素上要呼叫的函式。
為什麼要這麼處理呢?這是因為cmp方法本身也是針對物件的特定元素來進行比較的,直接使用特定元素的值更快捷、效率更高。

到此這篇關於python3中sorted函式裡cmp引數改變詳解的文章就介紹到這了,更多相關python3中sorted函式裡關於cmp這一引數的改變內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!