Python中的sort()方法使用基礎(chǔ)教程
一、基本形式
sorted(iterable[, cmp[, key[, reverse]]]) iterable.sort(cmp[, key[, reverse]])
參數(shù)解釋:
(1)iterable指定要排序的list或者iterable,不用多說;
(2)cmp為函數(shù),指定排序時進(jìn)行比較的函數(shù),可以指定一個函數(shù)或者lambda函數(shù),如:
students為類對象的list,沒個成員有三個域,用sorted進(jìn)行比較時可以自己定cmp函數(shù),例如這里要通過比較第三個數(shù)據(jù)成員來排序,代碼可以這樣寫:
students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)] sorted(students, key=lambda student : student[2])
(3)key為函數(shù),指定取待排序元素的哪一項進(jìn)行排序,函數(shù)用上面的例子來說明,代碼如下:
sorted(students, key=lambda student : student[2])
key指定的lambda函數(shù)功能是去元素student的第三個域(即:student[2]),因此sorted排序時,會以students所有元素的第三個域來進(jìn)行排序。
二、普通用法:
1.原址排序
1)列表有自己的sort方法,其對列表進(jìn)行原址排序,既然是原址排序,那顯然元組不可能擁有這種方法,因為元組是不可修改的。
x = [4, 6, 2, 1, 7, 9] x.sort() print x # [1, 2, 4, 6, 7, 9]
2.副本排序
1)[:]分片方法
x =[4, 6, 2, 1, 7, 9] y = x[ : ] y.sort() print y #[1, 2, 4, 6, 7, 9] print x #[4, 6, 2, 1, 7, 9]
注意:y = x[:] 通過分片操作將列表x的元素全部拷貝給y,如果簡單的把x賦值給y:y = x,y和x還是指向同一個列表,并沒有產(chǎn)生新的副本。
2)sorted方法
sorted返回一個有序的副本,并且類型總是列表,如下:
x =[4, 6, 2, 1, 7, 9] y = sorted(x) print y #[1, 2, 4, 6, 7, 9] print x #[4, 6, 2, 1, 7, 9] print sorted('Python') #['P', 'h', 'n', 'o', 't', 'y']
三、高級用法
1.自定義cmp比較函數(shù)
def comp(x, y): if x < y: return 1 elif x > y: return -1 else: return 0 nums = [3, 2, 8 ,0 , 1] nums.sort(comp) print nums # 降序排序[8, 3, 2, 1, 0] nums.sort(cmp) # 調(diào)用內(nèi)建函數(shù)cmp ,升序排序 print nums # 降序排序[0, 1, 2, 3, 8]
2.自定義key和reverse
1.reverse實現(xiàn)降序排序,需要提供一個布爾值,默認(rèn)為False(升序排列)。
2.key在使用時必須提供一個排序過程總調(diào)用的函數(shù):
alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')] # 多級排序,先按照第3個元素排序,然后按照第2個元素排序: print sorted(alist, cmp = None, key = lambda x:(int(x[2]), int(x[1])), reverse = False) ------------------------------------------------------------------------------------------- [('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
四、operator.itemgetter函數(shù)
operator模塊提供的itemgetter函數(shù)用于獲取對象的哪些維的數(shù)據(jù),參數(shù)為一些序號(即需要獲取的數(shù)據(jù)在對象中的序號),下面看例子。
a = [1,2,3] >>> b=operator.itemgetter(1) //定義函數(shù)b,獲取對象的第1個域的值 >>> b(a) 2 >>> b=operator.itemgetter(1,0) //定義函數(shù)b,獲取對象的第1個域和第0個的值 >>> b(a) (2, 1)
要注意,operator.itemgetter函數(shù)獲取的不是值,而是定義了一個函數(shù),通過該函數(shù)作用到對象上才能獲取值。
itemgetter在sort中的用法:
from operator import itemgetter alist = [('2', '3', '10'), ('1', '2', '3'), ('5', '6', '7'), ('2', '5', '10'), ('2', '4', '10')] # 多級排序,先按照第3個元素排序,然后按照第2個元素排序: print sorted(alist, cmp = None, key = itemgetter(2, 1), reverse = False) print sorted(alist, cmp = None, key = lambda x:itemgetter(2, 1)(x), reverse = False) print sorted(alist, cmp = None, key = lambda x:map(int, itemgetter(2, 1)(x)), reverse = False) -------------------------------------------------------------------------------------------------- [('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')] [('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10'), ('1', '2', '3'), ('5', '6', '7')] [('1', '2', '3'), ('5', '6', '7'), ('2', '3', '10'), ('2', '4', '10'), ('2', '5', '10')]
以上所述是小編給大家介紹的Python中的sort()方法使用基礎(chǔ) ,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復(fù)大家的!
相關(guān)文章
Django?ORM?事務(wù)和查詢優(yōu)化的操作方法
這篇文章主要介紹了Django?ORM?事務(wù)和查詢優(yōu)化,包括事務(wù)操作、ORM 惰性查詢及only與defer相關(guān)知識,本文通過實例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09使用Python連接MySQL數(shù)據(jù)庫進(jìn)行編程的步驟詳解
Python數(shù)據(jù)庫編程可以使用多種模塊與API,例如SQLite、MySQL、PostgreSQL等,本教程將重點介紹使用Python連接MySQL數(shù)據(jù)庫進(jìn)行編程,需要的朋友可以參考下2023-06-06python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實現(xiàn)innerhtml功能的方法
今天小編就為大家分享一篇python的xpath獲取div標(biāo)簽內(nèi)html內(nèi)容,實現(xiàn)innerhtml功能的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-01-01