如何理解python中的cmp_to_key()函數

  • 2022 年 1 月 22 日
  • 筆記

cmp_to_key()

在functools包里的函數,將老式的比較函數(cmp function)轉化為關鍵字函數(key function)。

與接受key function的工具一同使用(如 sorted(), min(), max(), heapq.nlargest(), itertools.groupby())。該函數主要用來將程式轉成 Python 3 格式的,因為 Python 3 中不支援比較cmp()。

sorted(iterable,key = functools.cmp_to_key(locale.strcoll))

cmp()與key()的不同

cmp(x,y)是可調用的,接受兩個參數,比較這兩個參數並根據他們的大小關係返回負值、零或正值中的某一個。

如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

更具體些,-1在排序中代表不改變x,y位置,1代表變成y,x位置。

比如

nums = ["1","10","2","3"]
sorted(nums,cmp(lambda x,y:int(x+y)-int(y+x)))   
---->["10","1","2","3"]

key()也是可調用的,接受一個參數,同時返回一個可以用作排序關鍵字的值。

nums = ["1","10","2","3"]
key = functools.cmp_to_key(lambda x,y:int(x+y)-int(y+x)) 
sorted(nums,key = key)   
----->["10","1","2","3"]