python的sort、sorted和argsort怎么使用

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怎么使用”文章已经介绍完毕,想要掌握这篇文章的知识点还需要大家自己动手实践使用过才能领会,如果想了解更多相关内容的文章,欢迎关注恰卡编程网行业资讯频道。

发布于 2022-03-09 22:50:56
收藏
分享
海报
0 条评论
38
上一篇:C++智能指针shared_ptr怎么使用 下一篇:pytorch中的广播语义是什么
目录

    推荐阅读

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码