您好,登錄后才能下訂單哦!
本文小編為大家詳細(xì)介紹“python的sort、sorted和argsort怎么使用”,內(nèi)容詳細(xì),步驟清晰,細(xì)節(jié)處理妥當(dāng),希望這篇“python的sort、sorted和argsort怎么使用”文章能幫助大家解決疑惑,下面跟著小編的思路慢慢深入,一起來(lái)學(xué)習(xí)新知識(shí)吧。
這三個(gè)排序方法應(yīng)對(duì)日常工作基本夠用
先說(shuō)一下三者的區(qū)別
sort, sorted 是用在 list 數(shù)據(jù)類(lèi)型中的排序方法
argsort 是用在 numpy 數(shù)據(jù)類(lèi)型中的排序方法( numpy 里也有一個(gè) sort 方法,下面會(huì)講)
先看兩個(gè)簡(jiǎn)單的升序排序,分別使用 sorted 和 sort 方法
# sorted num_list = [1, 8, 2, 3, 10, 4, 5] ordered_list = sorted(num_list) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort num_list = [1, 8, 2, 3, 10, 4, 5] num_list.sort() print(num_list) # [1, 2, 3, 4, 5, 8, 10]
可以看出 sorted 并沒(méi)有修改原來(lái)的數(shù)組,而是將排序的結(jié)果作為參數(shù)傳遞給一個(gè)新的數(shù)組,而 sort 則在原數(shù)組上直接進(jìn)行了排序
區(qū)別就是 sorted 需要一個(gè)變量接收排序結(jié)果,sort不用
建議使用 sorted,因?yàn)?sort 雖然代碼更簡(jiǎn)潔,但是會(huì)修改原數(shù)組,這樣不靈活,如果你有多個(gè)地方同時(shí)使用了這個(gè)數(shù)組,那么經(jīng)過(guò) sort 操作之后的數(shù)組就已經(jīng)不是原來(lái)那個(gè)數(shù)組了,
debug的時(shí)候很麻煩,說(shuō)完了區(qū)別,來(lái)具體講講使用方法
# sorted 升序排序 num_list = [1, 8, 2, 3, 10, 4, 5] ordered_list = sorted(num_list) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort 升序排序 num_list = [1, 8, 2, 3, 10, 4, 5] num_list.sort() print(num_list) # [1, 2, 3, 4, 5, 8, 10]
# sorted 降序排序 num_list = [1, 8, 2, 3, 10, 4, 5] ordered_list = sorted(num_list, reverse=True) print(ordered_list) # [1, 2, 3, 4, 5, 8, 10]
# sort 降序排序 num_list = [1, 8, 2, 3, 10, 4, 5] num_list.sort(reverse=True) print(num_list) # [1, 2, 3, 4, 5, 8, 10]
num_list = [1, 8, 2, 3, 10, 4, 5] ordered_list = sorted(range(len(num_list)), key=lambda k: num_list[k]) print(ordered_list) # [0, 2, 3, 5, 6, 1, 4]
# 字符串類(lèi)型排序 str_list = ['1', '8', '2', '3', '10', '4', '5'] ordered_list = sorted(str_list) print(ordered_list) # ['1', '10', '2', '3', '4', '5', '8'] str_list = ['A', 'D', 'B', 'N', 'C', 'R', 'V'] ordered_list = sorted(str_list) print(ordered_list) # ['A', 'B', 'C', 'D', 'N', 'R', 'V']
book_list = [ ['北大馬克思主義研究', '9787509728529', 2011], ['人的解放', '9787215064003', 2014], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['列寧的一生', '9787501319343', 2013], ] # sorted 按出版年升序排序 ordered_list = sorted(book_list, key=lambda book: book[2]) print(ordered_list) # [['北大馬克思主義研究', '9787509728529', 2011], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['列寧的一生', '9787501319343', 2013], ['人的解放', '9787215064003', 2014]] # sort 按出版年降序排序 book_list.sort(key=lambda book: book[2], reverse=True) print(book_list) # [['人的解放', '9787215064003', 2014], ['列寧的一生', '9787501319343', 2013], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['北大馬克思主義研究', '9787509728529', 2011]]
# sorted 獲取排序后的索引 book_list = [ ['北大馬克思主義研究', '9787509728529', 2011], ['人的解放', '9787215064003', 2014], ['西方經(jīng)典悅讀 資本論', '9787200092882', 2012], ['列寧的一生', '9787501319343', 2013], ] ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k][2]) print(ordered_list) # [0, 2, 3, 1]
book_list = [ {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}, {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, ] # sorted 按出版年降序排序 ordered_list = sorted(book_list, key=lambda book: book['publish_year'], reverse=True) print(ordered_list) # [{'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}] # sort 按出版年升序排序 book_list.sort(key=lambda book: book['publish_year']) print(book_list) # [{'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}]
book_list = [ {'name': '北大馬克思主義研究', 'isbn': '9787509728529', 'publish_year': 2011}, {'name': '人的解放', 'isbn': '9787215064003', 'publish_year': 2014}, {'name': '西方經(jīng)典悅讀 資本論', 'isbn': '9787200092882', 'publish_year': 2012}, {'name': '列寧的一生', 'isbn': '9787501319343', 'publish_year': 2013}, ] ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k]['publish_year']) print(ordered_list) # [0, 2, 3, 1]
class Book(object): def __init__(self, name, isbn, publish_year): self.name = name self.isbn = isbn self.publish_year = publish_year def __repr__(self): return repr((self.name, self.isbn, self.publish_year)) book_list = [ Book('北大馬克思主義研究', '9787509728529', 2011), Book('人的解放', '9787215064003', 2014), Book('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), Book('列寧的一生', '9787501319343', 2013), ] # sorted 按出版年降序排序 ordered_list = sorted(book_list, key=lambda book: book.publish_year, reverse=True) print(ordered_list) # [('人的解放', '9787215064003', 2014), ('列寧的一生', '9787501319343', 2013), ('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), ('北大馬克思主義研究', '9787509728529', 2011)] # sort 按出版年升序排序 book_list.sort(key=lambda book: book.publish_year) print(book_list) # [('北大馬克思主義研究', '9787509728529', 2011), ('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), ('列寧的一生', '9787501319343', 2013), ('人的解放', '9787215064003', 2014)]
book_list = [ Book('北大馬克思主義研究', '9787509728529', 2011), Book('人的解放', '9787215064003', 2014), Book('西方經(jīng)典悅讀 資本論', '9787200092882', 2012), Book('列寧的一生', '9787501319343', 2013), ] ordered_list = sorted(range(len(book_list)), key=lambda k: book_list[k].publish_year) print(ordered_list) # [0, 2, 3, 1]
numpy 只有 sort 沒(méi)有 sorted,且 numpy 的 sort 方法 和 list 的 sorted 方法使用起來(lái)類(lèi)似
import numpy as np # 一維數(shù)組 num_list = np.array([1, 8, 2, 3, 10, 4, 5]) index_list = np.sort(num_list) print(index_list) # [ 1 2 3 4 5 8 10]
num_list = np.array([1, 8, 2, 3, 10, 4, 5]) index_list = np.argsort(num_list) print(index_list) # [0 2 3 5 6 1 4]
# # 降序排序 num_list = np.array([1, 8, 2, 3, 10, 4, 5]) index_list = np.argsort(-num_list) # 加負(fù)號(hào)按降序排序 print(index_list) # [4 1 6 5 3 2 0]
num_list = np.array([ [1, 8, 2, 9], [8, 2, 4, 5], [2, 3, 7, 4], [1, 2, 3, 5] ]) ordered_list = np.sort(num_list, axis=0) # axis=0 是按列排序 print(ordered_list) # [[1 2 2 4] # [1 2 3 5] # [2 3 4 5] # [8 8 7 9]] ordered_list = np.sort(num_list, axis=1) # axis=1 是按行排序 print(ordered_list) # [[1 2 8 9] # [2 4 5 8] # [2 3 4 7] # [1 2 3 5]]
num_list = np.array([ [1, 8, 2, 9], [8, 2, 4, 5], [2, 3, 7, 4], [1, 2, 3, 5] ]) ordered_list = np.argsort(num_list, axis=0) # axis=0 是按列排序 print(ordered_list) # [[0 1 0 2] # [3 3 3 1] # [2 2 1 3] # [1 0 2 0]] ordered_list = np.argsort(num_list, axis=1) # axis=1 是按行排序 print(ordered_list) # [[0 2 1 3] # [1 2 3 0] # [0 1 3 2] # [0 1 2 3]]
# -*- coding: cp936 -*- import numpy as np #一維數(shù)組排序 arr = [1, 3, 5, 2, 4, 6] arr = np.array(arr) print arr print np.sort(arr)#或print np.sort(arr,axis=None) print (np.argsort(arr)) # 正序輸出索引,從小到大 print (np.argsort(-arr)) # 逆序輸出索引,從大到小
輸出結(jié)果:
[1 3 5 2 4 6]
[1 2 3 4 5 6]
[0 3 1 4 2 5]
[5 2 4 1 3 0]
#二維數(shù)組排序 list1 = [[4,3,2],[2,1,4]] array=np.array(list1) print array array.sort(axis=1) #axis=1按行排序,axis=0按列排序 print array
輸出結(jié)果:
[[4 3 2]
[2 1 4]][[2 3 4]
[1 2 4]]
讀到這里,這篇“python的sort、sorted和argsort怎么使用”文章已經(jīng)介紹完畢,想要掌握這篇文章的知識(shí)點(diǎn)還需要大家自己動(dòng)手實(shí)踐使用過(guò)才能領(lǐng)會(huì),如果想了解更多相關(guān)內(nèi)容的文章,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。