1. 程式人生 > >Python_sort函數結合functools.cmp_to_key(func)分析

Python_sort函數結合functools.cmp_to_key(func)分析

cname acc 指定 .py int element data 分析 ade

舉例如下:

 1 from functools import cmp_to_key
 2 persons = [
 3     {
 4         name:zhangsan,
 5         age:20,
 6         grade:98
 7     },
 8     {
 9         name:lisi,
10         age:18,
11         grade: 88
12     },
13     {
14         name:wangwu,
15         age:20,
16         
grade: 20 17 }, 18 { 19 name: yanqing, 20 age: 15, 21 grade: 20 22 }, 23 { 24 name: awu, 25 age: 20, 26 grade: 20 27 }, 28 ] 29 30 def cmp(a,b): 31 # 如果返回的是一個大於0的值,那麽代表a>b 32 # 如果返回的是一個小於0的值,那麽代表a<b 33 # 如果返回的是一個等於0的值,那麽代表a=b
34 if a[grade] > b[grade]: 35 return 1 36 37 elif a[grade] < b[grade]: 38 return -1 39 else: 40 if a[age] > b[age]: 41 return 1 42 elif a[age] < b[age]: 43 return -1 44 else: 45 if a[
name] > b[name]: 46 return 1 47 else: 48 return -1 49 persons.sort(key=cmp_to_key(cmp)) 50 new_persons = sorted(persons,key=cmp_to_key(cmp)) 51 print(persons) 52 print(new_persons)

針對sort(key=cmp_to_key(cmp))及函數cmp所產生的作用嘗試分析。

如下:

Sort(*,key=None,reverse = False)

sort()接受兩個只能通過關鍵字傳遞的參數(關鍵字參數):

key指定一個參數的函數,該函數用於從每個列表元素中提取一個比較鍵(例如,key=str.lower)。對列表中每個項對應的鍵計算一次,然後用於整個排序過程。None的默認值意味著列表項是直接排序的,不需要計算單獨的鍵值。

可以使用functools.cmp_to_key()實用程序來轉換2。將cmp函數樣式設置為關鍵函數。

functools.cmp_to_keyfunc

將舊式比較函數(old-style comparison function)轉換為關鍵函數(key function)使用接受關鍵函數的工具(如sorted()min()max()heapq.nlargest()heapq.nsmallest()itertools.groupby())。此函數主要用作從Python 2轉換的程序的轉換工具,它支持使用比較函數。

比較函數是任何可調用的,它接受兩個參數,對它們進行比較,並返回一個負數表示小於,零表示相等,或者一個正數表示大於。鍵函數是一個可調用的函數,它接受一個參數並返回另一個值作為排序鍵使用。

key function

關鍵函數或排序函數是可調用的,它返回用於排序或排序的值。例如,使用local .strxfrm()生成一個排序鍵,該鍵知道特定於區域設置的排序約定。

Python中的許多工具接受關鍵函數來控制元素的排序或分組方式(A number of tools in Python accept key functions to control how elements are ordered or grouped)。它們包括min()max()sorted()list.sort()heapq.merge()heapq.nsmallest()heapq.nlargest(),和 itertools.groupby()

有幾種方法可以創建關鍵函數。為例。low()方法可以作為區分大小寫排序的關鍵函數。或者,可以從一個lambda表達式構建一個關鍵函數,例如r:(r[0], r[2])。此外,運算符模塊還提供了三個關鍵的函數構造函數:attrgetter()、itemgetter()和methodcaller()。

最後總結:

# sort是對列表進行排序
# key 主要是用來進行比較的元素,只有一個參數,具體的函數的參數就是取自於可叠代對象中,指定可叠代對象中的一個元素來進行排序,每次排序前調用
# cmp_to_key 將比較函數轉換為關鍵字函數
# cmp 自定義比較函數

比較函數類似於制定了比較規則。

Python_sort函數結合functools.cmp_to_key(func)分析