python數(shù)組排序方法之sort、sorted和argsort詳解
引言
這三個排序方法應(yīng)對日常工作基本夠用
先說一下三者的區(qū)別
- sort, sorted 是用在 list 數(shù)據(jù)類型中的排序方法
- argsort 是用在 numpy 數(shù)據(jù)類型中的排序方法( numpy 里也有一個 sort 方法,下面會講)
sort 和 sorted 的區(qū)別如下??
先看兩個簡單的升序排序,分別使用 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 并沒有修改原來的數(shù)組,而是將排序的結(jié)果作為參數(shù)傳遞給一個新的數(shù)組,而 sort 則在原數(shù)組上直接進行了排序
區(qū)別就是 sorted 需要一個變量接收排序結(jié)果,sort不用
建議使用 sorted,因為 sort 雖然代碼更簡潔,但是會修改原數(shù)組,這樣不靈活,如果你有多個地方同時使用了這個數(shù)組,那么經(jīng)過 sort 操作之后的數(shù)組就已經(jīng)不是原來那個數(shù)組了,
debug的時候很麻煩,說完了區(qū)別,來具體講講使用方法
用法實例
1.升序排序
# 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]
2.降序排序
# 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]
3.如果不想要排序后的值,想要排序后的索引,可以這樣做
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]
4.字符串類型排序
# 字符串類型排序 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']
5.二維數(shù)組排序
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]]
6.二維數(shù)組獲取排序后的索引
# 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]
7.字典數(shù)組排序
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}]
8.字典數(shù)組獲取排序后的索引
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]
9.對象排序
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)]
10.對象排序獲取排序后的索引
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]
11.一維數(shù)組排序【numpy】
numpy 只有 sort 沒有 sorted,且 numpy 的 sort 方法 和 list 的 sorted 方法使用起來類似
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]
12.一維數(shù)組獲取排序后的索引【numpy】
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]
13.一維數(shù)組降序排序【numpy】
# # 降序排序 num_list = np.array([1, 8, 2, 3, 10, 4, 5]) index_list = np.argsort(-num_list) # 加負(fù)號按降序排序 print(index_list) # [4 1 6 5 3 2 0]
14.二維數(shù)組排序【numpy】
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]]
15.二維數(shù)組獲取排序后的索引【numpy】
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]]
附:python對數(shù)組進行排序,并輸出排序后對應(yīng)的索引值
# -*- 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]]
總結(jié)
到此這篇關(guān)于python數(shù)組排序方法之sort、sorted和argsort詳解的文章就介紹到這了,更多相關(guān)python數(shù)組排序方法內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
基于python if 判斷選擇結(jié)構(gòu)的實例詳解
代碼執(zhí)行結(jié)構(gòu)為順序結(jié)構(gòu)、選擇結(jié)構(gòu)、循環(huán)結(jié)構(gòu)。這篇文章主要介紹了python if 判斷選擇結(jié)構(gòu)的相關(guān)知識,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下2019-05-05python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)
在pymysql中支持對占位符的處理,開發(fā)者需要在SQL中使用“%”定義占位符,在使用excute()方法執(zhí)行時對占位符的數(shù)據(jù)進行填充即可,本文給大家介紹python連接數(shù)據(jù)庫后通過占位符添加數(shù)據(jù)的方法,需要的朋友參考下吧2021-12-12Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法
今天小編就為大家分享一篇Python讀取數(shù)據(jù)集并消除數(shù)據(jù)中的空行方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-07-07基于PyTorch實現(xiàn)EdgeCNN的實戰(zhàn)教程
本文我們將使用PyTorch來簡易實現(xiàn)一個EdgeCNN,不使用PyG庫,讓新手可以理解如何PyTorch來搭建一個簡易的圖網(wǎng)絡(luò)實例demo,感興趣的朋友跟隨小編一起看看吧2023-02-02Windows 下python3.8環(huán)境安裝教程圖文詳解
這篇文章主要介紹了Windows 下python3.8環(huán)境安裝教程圖文詳解,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-03-03