Python中的排序函数argsort,sort,sorted

来源:互联网 发布:广东利为网络和多益 编辑:程序博客网 时间:2024/05/16 23:58

Python中的排序函数argsort,sort,sorted

1、argsort()函数

对数组的索引或下标进行排序

测试实例1:

from numpy import *arr = array([3,1,2])#对索引进行的排序AsendSortInx = argsort(arr) #索引升序排序(1)DesendSortInx = argsort(-arr)#索引降序排序(2)print('升序排序的索引')print(AsendSortInx)print('升序排序的索引')print(DesendSortInx)#通过索引值排序后的数组AsendSort = arr[argsort(arr)] #索引值升序排序(3)DesendSort = arr[argsort(-arr)]#索引值降序排序(4)print('升序排序的索引值')print(AsendSort)print('升序排序的索引值')print(DesendSort)#用数组调用同(1)print('数组直接调用')x = arr.argsort()print(x)

运行结果1:

这里写图片描述

2、sort()函数

是list列表中的函数,可对list进行排序。
使用sort函数排序会影响列表本身。

测试实例2:

arr = [1,2,1,4,3,5]arr.sort()print(arr)

运行结果2:

这里写图片描述

3、sorted()函数

可以对list或者Dict进行排序。
但sorted函数对列表排序不会影响列表本身。
sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
iterable:是可迭代类型;
cmp:用于比较的函数,比较什么由key决定;
key:用列表元素的某个属性或函数进行作为关键字,有默认值,迭代集合中的一项;通常为带一个参数的函数。
其中cmp和key可以是lambda表达式。
reverse:排序规则. reverse = True 降序 或者 reverse = False 升序,有默认值。
返回值:是一个经过排序的可迭代类型,与iterable一样。

——对列表的排序—–

测试实例3:

arr = [1,2,1,4,3,5]a = sorted(arr)print('排序结果')print(a)print('排序列表')print(arr)

运行结果3:
这里写图片描述

证明排完序后并不影响排序列表的结果。

——对元素为元祖的列表排序——

①、用cmp函数排序

因为本次我的IDE为python3,因cmp函数已经不存在,故使用key函数代替cmp函数。(参考https://my.oschina.net/soarwilldo/blog/506415#OSC_h2_6)
如果强行使用,会报出TypeError: ‘cmp’ is an invalid keyword argument for this function 这样的错误。

测试实例4:

#用cmp函数进行排序list1 = [('david', 90), ('mary',90), ('sara',80),('lily',95)]list1sorted1 = sorted(list1,key = lambda x:x[0:])#对元祖tuple中第一个元素进行排序list1sorted2 = sorted(list1,key = lambda x:x[1:])#对元祖tuple中第二个元素进行排序print('以名字排序结果:')print(list1sorted1)print('以分数排序结果:')print(list1sorted2)

运行结果4:

这里写图片描述

②用key函数排序

指定元祖中的第几个域为排序依据。

测试实例5:

#用key函数进行排序list1 = [('david', 90), ('mary',90), ('sara',80),('lily',95)]list1sorted1 = sorted(list1,key = lambda a:a[0])#对元祖tuple中第一个元素进行排序list1sorted2 = sorted(list1,key = lambda a:a[1])#对元祖tuple中第二个元素进行排序print('以名字排序结果:')print(list1sorted1)print('以分数排序结果:')print(list1sorted2)

运行结果5:

这里写图片描述

③用reverse排序

可取True代表降序,False代表升序。
默认对元祖的第一个元素进行排序。

测试实例6:

#用reverse排序list1 = [('david', 90), ('mary',90), ('sara',80),('lily',95)]de = sorted(list1,reverse = True)#True代表降序  false代表升序   默认对元祖的第一个元素进行排序inc = sorted(list1,reverse = False)print('降序:')print(de)print('升序:')print(inc)

运行结果6:

这里写图片描述

④多级排序operator.itemgetter()

sorted(list, key=operator.itemgetter(x,y))

测试实例7:

from operator import *#用operator.itemgetter(x,y)进行多级排序list1 = [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]mutirandk = sorted(list1,key=itemgetter(1,2))#先根据第一个元素进行排序 再根据第二个元素进行排序print('多级排序:先根据等级 后根据分数排序')print(mutirandk)

运行结果7:
这里写图片描述

可以看出dave和jane两人等级均为B,所以要根据第二排序的元素进行确定,10小于12,所以dave在前。

——对字典的排序—–

例如:sorted(dic.items(), key=lambda d:d[1], reverse = False )
排序元素为:在python3中items() 返回字典的一个元祖列表。 【ps】在python2中用iteritems()
key:以元祖中的第二个元素为依据。 也可以写为key = itemgetter(1)
reverse:为False代表升序排序 True代表降序排序

示例代码8:

#对字典进行排序dic = {'zc':80 ,'05h':85,'mx':70}sorteddic = sorted(dic.items(),key=itemgetter(1),reverse=False)print('对字典的排序结果')print(sorteddic)

运行结果8:
这里写图片描述

终结

(参考http://blog.csdn.net/shengmingqijiquan)
http://www.cnblogs.com/100thMountain/p/4719503.html
http://www.cnblogs.com/sysu-blackbear/p/3283993.html)

虽然一边看实战一边学python,进度是慢了点,但是看到自己一天天写的笔记、积累的东西还是觉得很充实,排序搞定,加油~~~

阅读全文
1 0
原创粉丝点击