關於python3沒有cmp如何代替的問題

時間 2021-05-07 20:01:23

1樓:

>>> sorted(['bob','bob','about','zoo','credit'], key=str.lower)

['about', 'bob', 'bob', 'credit', 'zoo']

忽略大小寫的比較,先轉小寫作為鍵值排序

2樓:匿名使用者

python3自帶了解決方案,在functools包中有一個把按cmp方式的寫的函式轉換成key方式函式的函式,用法如下

from functools import cmp_to_key

print(sorted(['bob','bob','about','zoo','credit'], key=cmp_to_key(cmp_ignore_case)))

對你這個排序需求實際上用key方式完全可以達到求。

比如要先按每個單詞的第2個字母排序再按第3個字母排序。

>>> from operator import itemgetter

>>> sorted(['bob','bob','about','zoo','credit'], key=itemgetter(1,2))

['about', 'bob', 'bob', 'zoo', 'credit']

python3沒有了cmp函式,自定義的排序sort方法不是需要它作引數嗎?!!怎麼辦? 5

3樓:匿名使用者

自定義排序用key關鍵字

>>> a=['abc','abcd','ab']>>> a.sort(key=len) #使用len函式返回的大小排序

>>> a

['ab', 'abc', 'abcd']key和reverse是有

專的,試一下

屬就知道了

4樓:尐二瓜

python3開始沒這個函式了,官方文件是這麼寫的the cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (if you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).

)大意就是cmp()函式已經「離開」了,如果回你真的需要cmp()函式,你可以用答表示式(a > b) - (a < b)代替cmp(a,b)

key和reverse還是可以用的。

如果解決了您的問題請採納!

如果未解決請繼續追問!

python3.2.2版本中的cmp()函式

5樓:

3開始沒這個函式了,官方文件是這麼寫的

the cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (if you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).

)大意就是cmp()函式已經「離開」了,如果你真的需要cmp()函式,你可以用表示式(a > b) - (a < b)代替cmp(a,b)

關於python的覆蓋__cmp__的兩點問題 20

6樓:從頭開始自學

__cmp__

對 int、str 等內建資料型別排序時,python的 sorted() 按照預設的比較函式 cmp 排序,但是,如果對一組 student 類的例項排序時,就必須提供我們自己的特殊方法 __cmp__():

class student(object):

def __init__(self, name, score):

self.name = name

self.score = score

def __str__(self):

return '(%s: %s)' % (self.name, self.score)

__repr__ = __str__

def __cmp__(self, s):

if self.name < s.name:

return -1

elif self.name > s.name:

return 1

else:

return 0

上述 student 類實現了__cmp__()方法,__cmp__用例項自身self和傳入的例項 s 進行比較,如果 self 應該排在前面,就返回 -1,如果 s 應該排在前面,就返回1,如果兩者相當,返回 0。

student類實現了按name進行排序:

>>> l = [student('tim', 99), student('bob', 88), student('alice', 77)]

>>> print sorted(l)

[(alice: 77), (bob: 88), (tim: 99)]

注意: 如果list不僅僅包含 student 類,則 __cmp__ 可能會報錯:

l = [student('tim', 99), student('bob', 88), 100, 'hello']

print sorted(l)

請思考如何解決。

class student(object):

def __init__(self, name, score):

self.name = name

self.score = score

def __str__(self):

return '(%s: %s)' % (self.name, self.score)

__repr__ = __str__

def __cmp__(self, s):

if(self.scores.score):

return -1

if(self.score==s.score):

if(self.name>s.name):

return 1;

if(self.name

return -1

return 0

l = [student('tim', 99), student('bob', 88), student('alice', 99)]

print sorted(l)

新手學習python3.2 有關cmp

7樓:娜莉

the cmp() function should be treated as gone, and the __cmp__() special method is no longer supported. use __lt__() for sorting, __eq__() with __hash__(), and other rich comparisons as needed. (if you really need the cmp() functionality, you could use the expression (a > b) - (a < b) as the equivalent for cmp(a, b).

)大意就是cmp()函式已經「離開」了,如果你真的需要cmp()函式,可以用表示式(a > b) - (a < b)代替cmp(a,b)。

8樓:

一定是你的書太老了,介紹的py2.2左右的版本,現在推薦學2.7或者3.2版

主流版本中對字典的比較直接用"=="即可

dict3==dict4

會返回一個布林值,true表示相等,false不等和少打字沒有太大關係

9樓:匿名使用者

cmp(dic3,dict4)

少打了一個字母

應該是cmp(dict3,dict4)

祝你學習愉快!

關於python的簡單問題,關於python的一個簡單問題

我覺得,你想實現你的邏輯,需要用的是while,而不是用if else,不管輸入幾次錯誤值,用while控制會好點 關於python網路爬蟲的一個簡單問題 不忍呵 你用的是python2,所以才會有這種編碼問題簡單一點的話 你拿python3重寫一下就行了。如果改的話,在表頭定義一下你要輸出的編碼,...

python中關於類的問題求解

作業要自己做才能提高水平,只說原理,這個問題,定義長寬高,和計算體積,都不是難點,主要是如何知道例項化數量。python的特性是,類的變數,如果是在類裡面直接申明,那麼就是靜態變數,這個類的所有物件都共享共一個變數,用類名來訪問。在這個問題中可以用來計數,例如 class box count 0 d...

關於Python中sort函式賦值的問題

python中的sort 方法用於陣列排序,本文以例項形式對此加以詳細說明 一 基本形式 列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。123x 4,6,2,1,7,9 x.sort print x 1,2,4,6,7,9 如果需...