Python排序函数的使用方法详解


Posted in Python onDecember 11, 2020

Python排序函数完美体现了Python语言的简洁性,对于List对象,我们可以直接调用sort()函数(这里称为"方法"更合适)来进行排序,而对于其他可迭代对象(如set,dict),我们可以使用更灵活的sorted()函数。

一.List的sort()函数

Python源码builtins.py文件对sort()函数的定义如下

def sort(self, key=None, reverse=False):
 """ L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* """
 pass

可以看出:sort()函数没有返回值,有两个参数。key表示的是排依据的函数;reverse是指需不需要反转列表,默认为False表示的是升序,如果设为True表示的是降序。

sort()用法如下

L = [1, 2, 7, 4, 3]
L.sort()
print(L)
#[1, 2, 3, 4, 7]

我们加入一些参数来看看,如降序排序:

L = [1, 2, 7, 4, 3]
L.sort(reverse=True)
print(L)
#[7, 4, 3, 2, 1]

再比如,我们想通过key来实现降序排序,这里用到匿名函数lambda:

L = [1, 2, 7, 4, 3]
L.sort(key=lambda x : x*(-1))
print(L)
#[7, 4, 3, 2, 1]

当然,key还有很多用法,我们可以将其设为内置函数或者自定义函数,比如用绝对值函数:

L = [-1, 2, -7, 4, 3]
L.sort(key=abs)
print(L)
#[-1, 2, 3, 4, -7]

Python3对key的还有另外一种支持,就是通过functools模块的cmp_to_key函数,将传统的cmp函数转为key。这和lambda函数用法类似,但是对于比较的逻辑比较复杂的情况,这样的方式会更清晰更便于维护。

from functools import cmp_to_key
L = [-1, 2, -7, 4, 3]
def cmp(a,b):
 if abs(a) < abs(b):
 return -1
 else:
 return 1
L.sort(key=cmp_to_key(cmp))
print(L)

二.sorted()

比起sort()函数只能排序列表,sorted函数更通用一些。官方文档对其有详细说明:

sorted(iterable, *, key=None, reverse=False)
Return a new sorted list from the items in iterable.

sorted()返回值为List类型。参数列表iterable表示可迭代对象;*表示位置参数就此终结,后面的参数都必须用关键字来指定;key与reverse参数用法与sort()完全一致。

sorted()用法如下:

L = [1, 2, 7, 4, 3]
L1 = sorted(L)
print(L1)
#[1, 2, 3, 4, 7]

对于reverse和key的用法就不单独展示了,可以参考sort()。如果我们想要排序的对象是一个集合,那么用法与列表排序一样:

S = {1, 2, 7, 4, 3}
S1= sorted(S)
print(S1)
#[1, 2, 3, 4, 7]

注意这个排序对象是set对象,而结果是一个列表对象(set对象本就没有顺序一说)。如果我们要实现一个复杂一点的排序呢?比如对字典排序,排序依据是键值,排序结果是由键值对组成的列表:

Dict = {'a':2, 'b':3, 'c':7, 'd':4, 'e':1}
L = sorted(Dict.items(), key=lambda x : x[1])
print(L)
#[('e', 1), ('a', 2), ('b', 3), ('d', 4), ('c', 7)]

最后给一个Leetcode上的题(根据字符出现频率排序):

给定一个字符串,请将字符串里的字符按照出现的频率降序排列。
输入:
"tree"
输出:
"eert"
解释:
'e'出现两次,'r'和't'都只出现一次。因此'e'必须出现在'r'和't'之前。此外,"eetr"也是一个有效的答案。

通过使用sorted函数代码就很清晰易读了:

def frequencySort(s):
 d = {}
 for i in s:
 d[i] = d.get(i,0) + 1
 L = sorted(d.keys(), key=lambda x: d[x], reverse=True)
 s = ''
 for i in L:
 s += i * d[i]
 return s

注意这里的d.keys()生成的是一个由key组成的可迭代对象,而前面代码的Dict.items()生成的是一个由键值对对象(这是一个Tuple对象)组成的可迭代对象。

到此这篇关于Python排序函数用法的文章就介绍到这了,更多相关Python排序函数用法内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
详解python单元测试框架unittest
Jul 02 Python
Python绘制的二项分布概率图示例
Aug 22 Python
Python爬取成语接龙类网站
Oct 19 Python
Python读取stdin方法实例
May 24 Python
Python Pandas 如何shuffle(打乱)数据
Jul 30 Python
Python Selenium参数配置方法解析
Jan 19 Python
K最近邻算法(KNN)---sklearn+python实现方式
Feb 24 Python
python字符串判断密码强弱
Mar 18 Python
python语言中有算法吗
Jun 16 Python
Django Model层F,Q对象和聚合函数原理解析
Nov 12 Python
python中round函数保留两位小数的方法
Dec 04 Python
python字典按照value排序方法
Dec 28 Python
Python数据分析库pandas高级接口dt的使用详解
Dec 11 #Python
python 自定义异常和主动抛出异常(raise)的操作
Dec 11 #Python
解决python 在for循环并且pop数组的时候会跳过某些元素的问题
Dec 11 #Python
基于Python中Remove函数的用法讨论
Dec 11 #Python
在 Python 中使用 7zip 备份文件的操作
Dec 11 #Python
Python文件名匹配与文件复制的实现
Dec 11 #Python
Python: glob匹配文件的操作
Dec 11 #Python
You might like
使用 php4 加速 web 传输
2006/10/09 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP实现原生态图片上传封装类方法
2016/11/08 PHP
JavaScript 命名空间 使用介绍
2013/08/29 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
MVC Ajax Helper或Jquery异步加载部分视图
2015/11/29 Javascript
jquery插件jquery.confirm弹出确认消息
2015/12/22 Javascript
jQuery easyUI datagrid 增加求和统计行的实现代码
2016/06/01 Javascript
JavaScript中点击事件的写法
2016/06/28 Javascript
简单的js计算器实现
2016/10/26 Javascript
微信小程序 解决请求服务器手机预览请求不到数据的方法
2017/01/04 Javascript
parabola.js抛物线与加入购物车效果的示例代码
2017/10/25 Javascript
js中的reduce()函数讲解
2019/01/18 Javascript
详解webpack4.x之搭建前端开发环境
2019/03/28 Javascript
JavaScript中变量提升机制示例详解
2019/12/27 Javascript
js Math数学简单使用操作示例
2020/03/13 Javascript
基于js实现数组相邻元素上移下移
2020/05/19 Javascript
[00:52]玛尔斯技能全介绍
2019/03/06 DOTA
[47:52]完美世界DOTA2联赛PWL S2 PXG vs InkIce 第二场 11.26
2020/11/30 DOTA
Python使用MONGODB入门实例
2015/05/11 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
pycharm新建Vue项目的方法步骤(图文)
2020/03/04 Python
cosme官方海外旗舰店:日本最大化妆品和美容产品的综合口碑网站
2017/01/18 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
德国拖鞋网站:German Slippers
2019/11/08 全球购物
财务部岗位职责
2013/11/19 职场文书
财务出纳岗位职责
2014/02/03 职场文书
银行职员个人的工作自我评价
2014/02/15 职场文书
个人整改措施书面材料
2014/10/24 职场文书
大学生党员个人总结
2015/02/13 职场文书
KTV员工管理制度
2015/08/06 职场文书
MySql 8.0及对应驱动包匹配的注意点说明
2021/06/23 MySQL
PostgreSQL数据库去除重复数据和运算符的基本查询操作
2022/04/12 PostgreSQL
微软官方消息,在 2023 年 4 月 11 日之后微软将不再为 Office 2013 和 Skype for Business 2015 提供安全更新
2022/04/21 数码科技
科学家测试在太空中培育人造肉,用于未来太空旅行
2022/04/29 数码科技