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) 祝你學習愉快! 我覺得,你想實現你的邏輯,需要用的是while,而不是用if else,不管輸入幾次錯誤值,用while控制會好點 關於python網路爬蟲的一個簡單問題 不忍呵 你用的是python2,所以才會有這種編碼問題簡單一點的話 你拿python3重寫一下就行了。如果改的話,在表頭定義一下你要輸出的編碼,... 作業要自己做才能提高水平,只說原理,這個問題,定義長寬高,和計算體積,都不是難點,主要是如何知道例項化數量。python的特性是,類的變數,如果是在類裡面直接申明,那麼就是靜態變數,這個類的所有物件都共享共一個變數,用類名來訪問。在這個問題中可以用來計數,例如 class box count 0 d... python中的sort 方法用於陣列排序,本文以例項形式對此加以詳細說明 一 基本形式 列表有自己的sort方法,其對列表進行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。123x 4,6,2,1,7,9 x.sort print x 1,2,4,6,7,9 如果需...關於python的簡單問題,關於python的一個簡單問題
python中關於類的問題求解
關於Python中sort函式賦值的問題