Pythonでsort,sortedのcmpパラメータを破棄してcmp_を使用to_key類似機能の実現

1886 ワード

Python2.1以前のソート比較方法では、cmp比較関数パラメータが1つしか提供されておらず、_lt__など6つの富比較方法を導入し、Python 2.1は富比較方法、Python 3を導入した.4その後cmpパラメータを無効にした.従ってPython 2.4から、list.sortメソッドとsortedメソッドは、比較する前に各リスト要素で呼び出す関数を指定するために「key」パラメータを追加しました.しかし、この関数では2つのオブジェクト間の比較はサポートされず、あるオブジェクトを処理した後に1つの値を返すことのみがサポートされます.「Pythonにおけるsort,sortedのcmpパラメータを廃棄した後に__lt_を用いて複雑な比較をサポートする方法」では,書き換え_を用いたlt__方法の複雑な比較を実現する方法は,この方法に加えてPythonが提案する方法はfunctoolsモジュールのcmp_を用いることである.to_key()は,従来の比較手法を新規パラメータkeyがサポートする関数に変換する.具体的な手順は以下の通りです:1、import functoolsモジュール;2、functoolsを呼び出す.cmp_to_key(cmp)は、比較関数cmpをソート方法sort/sortedのパラメータkeyが使用できる関数、例えばcmpkeyに変換する.3、sort/sorted着信key=cmpkeyを呼び出す.ケース:
>>> import functools
>>> def cmp(self,other):
    if self.price>other.price:return 1
    elif  self.price==other.price:return 0
    else:return -1
>>> class Car():
   def __init__(self,carname, price):
       self.carname,self.price = carname, price
   def __repr__(self): 
       return str(self.__dict__)

>>> car1,car2,car3,car4 = Car('   ',10),Car('   ',27),Car('   ',10),Car('  ',27)
>>> cars=[car1,car2,car3,car4]
>>> cars
[{'carname': '   ', 'price': 10}, {'carname': '   ', 'price': 27}, {'carname': '   ', 'price': 10}, {'carname': '  ', 'price': 27}]
>>> cars.sort(key=functools.cmp_to_key(cmp))  #  cmp_to_key      
>>> cars  #      
[{'carname': '   ', 'price': 10}, {'carname': '   ', 'price': 10}, {'carname': '   ', 'price': 27}, {'carname': '  ', 'price': 27}]
>>> 

参考資料:「Pythonにおけるソート方法sort、関数sortedのkeyパラメータの役割分析」
老猿Python,与老猿学Python!ブログアドレス:https://blog.csdn.net/LaoYuanPython皆さん、よろしくお愿いします.ありがとう!