您的位置:首页 > 编程语言 > Python开发

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

2017-07-21 22:10 911 查看

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:



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

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

[b]①、用cmp函数排序[/b]

因为本次我的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,进度是慢了点,但是看到自己一天天写的笔记、积累的东西还是觉得很充实,排序搞定,加油~~~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  函数 python 机器学习