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