python3 sorted 如何自定義排序標準

2021-08-18 19:56:32 字數 1594 閱讀 8753

在 python2 中,如果想要自定義評價標準的話,可以這麼做

def

cmp(a, b):

# 如果邏輯上認為 a < b ,返回 -1

# 如果邏輯上認為 a > b , 返回 1

# 如果邏輯上認為 a == b, 返回 0

pass

a = [2,3,1,2]

a = sorted(a, cmp)

但是在python3中,cmp這個引數已經被移除了,那麼在python3中應該怎麼實現python2cmp功能呢?

import functools

defcmp

(a, b):

if b < a:

return -1

if a < b:

return

1return

0a = [1, 2, 5, 4]

print(sorted(a, key=functools.cmp_to_key(cmp)))

上面這個方法實現了降序排列,因為-1代表我們邏輯上認為a追溯cmp_to_key的原始碼,發現是這樣的

def

cmp_to_key

(mycmp):

"""convert a cmp= function into a key= function"""

class

k(object):

__slots__ = ['obj']

def__init__

(self, obj):

self.obj = obj

def__lt__

(self, other):

return mycmp(self.obj, other.obj) < 0

def__gt__

(self, other):

return mycmp(self.obj, other.obj) > 0

def__eq__

(self, other):

return mycmp(self.obj, other.obj) == 0

def__le__

(self, other):

return mycmp(self.obj, other.obj) <= 0

def__ge__

(self, other):

return mycmp(self.obj, other.obj) >= 0

__hash__ = none

return k

返回的是乙個類,在sorted內部,類接收乙個引數構造乙個例項,然後例項通過過載的方法來進行比較。

k1 = k(1)

k2 = k(2)

# 問題,k1,k2 誰是 self,誰是 other

# k1 是 self, k2 是 other

print(k1 < k2)

Python3內建函式sorted

排序也是在程式中經常用到的演算法。無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。python內建的sorted 函式就可以對list進行排序 sort...

Python3內建函式sorted

排序也是在程式中經常用到的演算法。無論使用氣泡排序還是快速排序,排序的核心是比較兩個元素的大小。如果是數字,我們可以直接比較,但如果是字串或者兩個dict呢?直接比較數學上的大小是沒有意義的,因此,比較的過程必須通過函式抽象出來。python內建的sorted 函式就可以對list進行排序 sort...

Python3 中sorted 函式的用法

描述 sorted 函式對所有可迭代的物件進行排序操www.cppcns.com作。語法sorted iterable,key none,reverse false iterable 可迭代物件。key 主要是用來進行比較的元素,只有乙個引數,具體的函式的引數就是取自於可迭代物件中,指定可迭代物件中...