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

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,进度是慢了点,但是看到自己一天天写的笔记、积累的东西还是觉得很充实,排序搞定,加油~~~

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python,进行数据分组和排序是非常常见的操作。要实现分组排序,可以使用多种工具。其,pandas是进行数据分析的首选工具,它提供了强大的分组排序功能。使用pandas,你可以使用groupby方法对数据进行分组,并使用sort_values方法对每个组的数据进行排序。例如,你可以按照某一列的值进行分组,然后按照另一列的值进行排序。 另外,numpy也在处理数值计算方面表现出色,可以用来进行分组排序。numpy提供了例如argsort函数,可以根据指定的条件对数组进行排序。 此外,Python的标准库也提供了简单而强大的分组排序工具。例如,你可以使用itertools.groupby函数对数据进行分组,然后使用sorted函数对每个组的数据进行排序。具体的实现方式可以参考引用的示例代码。 总之,在Python进行分组排序有多种选择,可以根据实际需求和数据类型选择合适的工具进行操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [chatgpt赋能pythonPython分组排序完全指南](https://blog.csdn.net/lvsetongdao123/article/details/131098789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值