python的sort、sorted和argsort怎么使用
python的sort、sorted和argsort怎么使用
本文小编为大家详细介绍“python的sort、sorted和argsort怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python的sort、sorted和argsort怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。
引言
这三个排序方法应对日常工作基本够用
先说一下三者的区别
sort, sorted 是用在 list 数据类型中的排序方法
argsort 是用在 numpy 数据类型中的排序方法( numpy 里也有一个 sort 方法,下面会讲)
sort 和 sorted 的区别如下
先看两个简单的升序排序,分别使用 sorted 和 sort 方法
#sortednum_list=[1,8,2,3,10,4,5]ordered_list=sorted(num_list)print(ordered_list)#[1,2,3,4,5,8,10]
#sortnum_list=[1,8,2,3,10,4,5]num_list.sort()print(num_list)#[1,2,3,4,5,8,10]
可以看出 sorted 并没有修改原来的数组,而是将排序的结果作为参数传递给一个新的数组,而 sort 则在原数组上直接进行了排序
区别就是 sorted 需要一个变量接收排序结果,sort不用
建议使用 sorted,因为 sort 虽然代码更简洁,但是会修改原数组,这样不灵活,如果你有多个地方同时使用了这个数组,那么经过 sort 操作之后的数组就已经不是原来那个数组了,
debug的时候很麻烦,说完了区别,来具体讲讲使用方法
用法实例
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=lambdak: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.二维数组排序
book_list=[['北大马克思主义研究','9787509728529',2011],['人的解放','9787215064003',2014],['西方经典悦读资本论','9787200092882',2012],['列宁的一生','9787501319343',2013],]#sorted按出版年升序排序ordered_list=sorted(book_list,key=lambdabook:book[2])print(ordered_list)#[['北大马克思主义研究','9787509728529',2011],['西方经典悦读资本论','9787200092882',2012],['列宁的一生','9787501319343',2013],['人的解放','9787215064003',2014]]#sort按出版年降序排序book_list.sort(key=lambdabook:book[2],reverse=True)print(book_list)#[['人的解放','9787215064003',2014],['列宁的一生','9787501319343',2013],['西方经典悦读资本论','9787200092882',2012],['北大马克思主义研究','9787509728529',2011]]
6.二维数组获取排序后的索引
#sorted获取排序后的索引book_list=[['北大马克思主义研究','9787509728529',2011],['人的解放','9787215064003',2014],['西方经典悦读资本论','9787200092882',2012],['列宁的一生','9787501319343',2013],]ordered_list=sorted(range(len(book_list)),key=lambdak:book_list[k][2])print(ordered_list)#[0,2,3,1]
7.字典数组排序
book_list=[{'name':'北大马克思主义研究','isbn':'9787509728529','publish_year':2011},{'name':'人的解放','isbn':'9787215064003','publish_year':2014},{'name':'西方经典悦读资本论','isbn':'9787200092882','publish_year':2012},{'name':'列宁的一生','isbn':'9787501319343','publish_year':2013},]#sorted按出版年降序排序ordered_list=sorted(book_list,key=lambdabook:book['publish_year'],reverse=True)print(ordered_list)#[{'name':'人的解放','isbn':'9787215064003','publish_year':2014},{'name':'列宁的一生','isbn':'9787501319343','publish_year':2013},{'name':'西方经典悦读资本论','isbn':'9787200092882','publish_year':2012},{'name':'北大马克思主义研究','isbn':'9787509728529','publish_year':2011}]#sort按出版年升序排序book_list.sort(key=lambdabook:book['publish_year'])print(book_list)#[{'name':'北大马克思主义研究','isbn':'9787509728529','publish_year':2011},{'name':'西方经典悦读资本论','isbn':'9787200092882','publish_year':2012},{'name':'列宁的一生','isbn':'9787501319343','publish_year':2013},{'name':'人的解放','isbn':'9787215064003','publish_year':2014}]
8.字典数组获取排序后的索引
book_list=[{'name':'北大马克思主义研究','isbn':'9787509728529','publish_year':2011},{'name':'人的解放','isbn':'9787215064003','publish_year':2014},{'name':'西方经典悦读资本论','isbn':'9787200092882','publish_year':2012},{'name':'列宁的一生','isbn':'9787501319343','publish_year':2013},]ordered_list=sorted(range(len(book_list)),key=lambdak:book_list[k]['publish_year'])print(ordered_list)#[0,2,3,1]
9.对象排序
classBook(object):def__init__(self,name,isbn,publish_year):self.name=nameself.isbn=isbnself.publish_year=publish_yeardef__repr__(self):returnrepr((self.name,self.isbn,self.publish_year))book_list=[Book('北大马克思主义研究','9787509728529',2011),Book('人的解放','9787215064003',2014),Book('西方经典悦读资本论','9787200092882',2012),Book('列宁的一生','9787501319343',2013),]#sorted按出版年降序排序ordered_list=sorted(book_list,key=lambdabook:book.publish_year,reverse=True)print(ordered_list)#[('人的解放','9787215064003',2014),('列宁的一生','9787501319343',2013),('西方经典悦读资本论','9787200092882',2012),('北大马克思主义研究','9787509728529',2011)]#sort按出版年升序排序book_list.sort(key=lambdabook:book.publish_year)print(book_list)#[('北大马克思主义研究','9787509728529',2011),('西方经典悦读资本论','9787200092882',2012),('列宁的一生','9787501319343',2013),('人的解放','9787215064003',2014)]
10.对象排序获取排序后的索引
book_list=[Book('北大马克思主义研究','9787509728529',2011),Book('人的解放','9787215064003',2014),Book('西方经典悦读资本论','9787200092882',2012),Book('列宁的一生','9787501319343',2013),]ordered_list=sorted(range(len(book_list)),key=lambdak:book_list[k].publish_year)print(ordered_list)#[0,2,3,1]
11.一维数组排序【numpy】
numpy 只有 sort 没有 sorted,且 numpy 的 sort 方法 和 list 的 sorted 方法使用起来类似
importnumpyasnp#一维数组num_list=np.array([1,8,2,3,10,4,5])index_list=np.sort(num_list)print(index_list)#[12345810]
12.一维数组获取排序后的索引【numpy】
num_list=np.array([1,8,2,3,10,4,5])index_list=np.argsort(num_list)print(index_list)#[0235614]
13.一维数组降序排序【numpy】
##降序排序num_list=np.array([1,8,2,3,10,4,5])index_list=np.argsort(-num_list)#加负号按降序排序print(index_list)#[4165320]
14.二维数组排序【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)#[[1224]#[1235]#[2345]#[8879]]ordered_list=np.sort(num_list,axis=1)#axis=1是按行排序print(ordered_list)#[[1289]#[2458]#[2347]#[1235]]
15.二维数组获取排序后的索引【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)#[[0102]#[3331]#[2213]#[1020]]ordered_list=np.argsort(num_list,axis=1)#axis=1是按行排序print(ordered_list)#[[0213]#[1230]#[0132]#[0123]]
附:python对数组进行排序,并输出排序后对应的索引值
#-*-coding:cp936-*-importnumpyasnp#一维数组排序arr=[1,3,5,2,4,6]arr=np.array(arr)printarrprintnp.sort(arr)#或printnp.sort(arr,axis=None)print(np.argsort(arr))#正序输出索引,从小到大print(np.argsort(-arr))#逆序输出索引,从大到小
输出结果:
[1 3 5 2 4 6]
[1 2 3 4 5 6]
[0 3 1 4 2 5]
[5 2 4 1 3 0]
#二维数组排序list1=[[4,3,2],[2,1,4]]array=np.array(list1)printarrayarray.sort(axis=1)#axis=1按行排序,axis=0按列排序printarray
输出结果:
[[4 3 2]
[2 1 4]][[2 3 4]
[1 2 4]]
读到这里,这篇“python的sort、sorted和argsort怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。
推荐阅读
-
python(中无效的十进制怎么解决 python怎么转换进制)
python怎么转换进制?Python执行二进制转换:1.十进制到二进制(bin)首先,让让我们看看如何将十进制转换成二进制。我...
-
python怎么清除完全相同的行(python splte如何分隔有多个相同符号的str)
pythonsplte如何分隔有多个相同符号的str?str你的string内容str_(相同的符号)执行完了以后再在相同符号的...
-
python(编程控制电脑关机 如何控制电脑关机)
如何控制电脑关机?可以在电脑的运行窗口中输入输入公式,给电脑可以设置自动关机。1.按开快捷键winr然后打开运行窗口。2.在运行窗...
-
python中的特殊标识符(python 中 标识符中可以有逗号吗)
python中标识符中可以有逗号吗?在python语言中合法的标识符是字母、数字以及_,所以我合法的标识符中肯定不能有逗号if...
-
python(excel 提取数据写入新表 python导入excel数据找不到工作簿)
python导入excel数据找不到工作簿?我可以导入数据后找不到工作,不是因为他的工作没有被转移。什么软件可提取并合并Exce...
-
python中字典定义的四种方法(python global关键字的用法详解)
pythonglobal关键字的用法详解?global标志实际上是目的是提示python讲解器,说被其修饰的变量是全局变量。这样...
-
python(array用法 python如何对两个数组做差处理)
python如何对两个数组做差处理?Python中的列表中的元素肯定不能真接相加,减。t最佳的位置的是将列表装换成Python中的...
-
python多行注释符号怎么表示
python多行注释符号怎么表示这篇文章主要介绍“python多行...
-
python支持的操作系统是什么
python支持的操作系统是什么这篇文章主要介绍“python支持...
-
python如何判断列表为空
python如何判断列表为空这篇文章主要介绍“python如何判断...