Python中排序方法sort、函數sorted的key參數的作用分析


從Python2.4開始,list.sort方法 和 sorted方法 都增加了一個 ‘key’ 參數用來在進行比較之前指定每個列表元素上要調用的函數,將函數的返回值作為比較的依據。
那么怎么使用這個key參數呢?
有2種辦法:
1、使用一個函數,這個函數的操作對象就是要比較的數據元素,返回結果就是某個可以用來比較的Python類型的數據;
2、使用匿名函數lambda,通過簡單表達式返回某個可以用來比較的Python類型的數據。
這兩種方法本質上是一致的。
我們來看案例。
一、 案例1:使用匿名函數lambda來作為key

  1. 代碼
>>> class Car():
   def __init__(self,carname,oilcp100km, price):
       self.carname,self.oilcp100km,self.price = carname,oilcp100km, price

   def __repr__(self):
       return str(self.__dict__)

>>> car1,car2,car3 = Car('愛麗舍',8,10),Car('凱美瑞',7,27),Car('科帕奇',12,23)
>>> cars=[car1,car2,car3]
>>> cars
[{'carname': '愛麗舍', 'oilcp100km': 8, 'price': 10}, {'carname': '凱美瑞', 'oilcp100km': 7, 'price': 27}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}]
>>> cars.sort(key=lambda x:x.price)  #根據售價進行排序
>>> cars
[{'carname': '愛麗舍', 'oilcp100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '凱美瑞', 'oilcp100km': 7, 'price': 27}]
>>>
  1. 執行截屏
    在這里插入圖片描述
  2. 案例分析
    從上面的案例情況來看,使用匿名函數返回實例的price作為排序依據,排序后列表中的元素按照price升序進行了排序。

二、 案例2:使用函數來作為key

  1. 案例說明:使用上面案例1的類及列表,新增一個函數getPrice來代替lambda,進行降序排序;
  2. 案例代碼:
>>> def getPrice(self):return self.price

>>> cars
[{'carname': '愛麗舍', 'oilcp100km': 8, 'price': 10}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '凱美瑞', 'oilcp100km': 7, 'price': 27}]
>>> cars.sort(key=getPrice,reverse=True)  #根據售價進行倒序排序
>>> cars
[{'carname': '凱美瑞', 'oilcp100km': 7, 'price': 27}, {'carname': '科帕奇', 'oilcp100km': 12, 'price': 23}, {'carname': '愛麗舍', 'oilcp100km': 8, 'price': 10}]
>>>
  1. 案例截屏
    在這里插入圖片描述
  2. 案例分析
    可以看到新增的函數正確被使用。
    通過上述案例,我們可以看到,排序函數sorted和排序方法sort中使用的key參數,是一個可調用的函數,並返回一個可以排序類型的值,排序時使用該返回值作為排序依據。

老猿Python,跟老猿學Python!
博客地址:https://blog.csdn.net/LaoYuanPython

請大家多多支持,點贊、評論和加關注!謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM