Python3实现对列表按元组指定列进行排序的方法分析


Posted in Python onDecember 22, 2018

本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:

Python版本: python3.+
运行环境: Mac OS
IDE: pycharm

Python内建的排序方法

1 排序方法介绍

Python中有2个排序函数,一个是list内置的sort()方法,另一个是全局的sorted()方法

sorted(iterable,key=None,reverse=False) #返回排好序的新列表,不改变对象本身,默认升序;reverse:-True降序 -False 正序对所有可迭代的对象均有效
list.sort(key=None,reverse=False) #将list自身进行排序,不返回新的list对象,默认升序;reverse:-True降序 -False 正序

2 基本的列表排序

1)list.sort()排序

data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = data.sort()
print(data) #结果为 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]
print(result) #结果为None

2)sorted()排序

data = [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
result = sorted(data)
print(data) #结果为 [5, 7, 9, 3, -6, -7, -8, -9, 3, -8]
print(result) #结果为 [-9, -8, -8, -7, -6, 3, 3, 5, 7, 9]

3 以tuple作为list的元素

在默认情况下sort和sorted函数接收的参数是元组时,它将会先按元组的第一个元素进行排序再按第二个元素进行排序,再按第三个、第四个…依次排序。

我们通过一个简单的例子来了解它,以下面这个list为例:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]

我们通过sorted()对它进行排序

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
result = sorted(data)
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'B'), (0, 'a'), (1, 'A'), (1, 'B'), (2, 'A')]

会发现排序后的结果中(0, 'B')在(0, 'a')的前面。这是因为在按元组第一个元素排好之后,将(0, 'B'), (0, 'a')再按第二个元素进行排序了,而'B'的ASCII编码比'a'小,所以(0, 'B')就排在(0, 'a')的前面了。

那如何想要让它排序时不分大小写呢?

这就要用到sort方法和sorted方法里的key参数了。

我们来看一下具体的实现:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
#利用参数key来规定排序的规则
result = sorted(data,key=lambda x:(x[0],x[1].lower()))
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'a'), (0, 'B'), (1, 'A'), (1, 'B'), (2, 'A')]

其中的lambda x:(x[0],x[1].lower()可以理解为一个匿名函数;

其功能类似于:

def fun(x)
  return(x[0],x[1].lower())

如果想要以字母作为第一排序规则,并且字母大小写不敏感,该怎么实现?

这就能要运用到之前所讲到的

在默认情况下sort和sorted函数接收的参数是元组时,它将会先按元组的第一个元素进行排序再按第二个元素进行排序,再按第三个、第四个…依次排序。

再配合lambda返回一个自定义tuple;代码如下:

data = [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
#将x[1].lower()作为返回元组里的第一个元素,按照sorted的排序规律,就会先按字母排序,再按数字排序了
result = sorted(data,key=lambda x:(x[1].lower(),x[0]))
print(data) #结果为 [(1, 'B'), (1, 'A'), (2, 'A'), (0, 'B'), (0, 'a')]
print(result) #结果为 [(0, 'a'), (1, 'A'), (2, 'A'), (0, 'B'), (1, 'B')]

4 [扩展] 以dict作为list的元素

这个list里的元素是dict形式,每个dict都存有姓名和升高现在想要以升高进行升序排列:

data = [{'name': '张三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}]
#将x['height']最为返回tuple的第个一元素
result = sorted(data,key=lambda x:(x['height'],x['name']))
print(data) #结果为
print(result)
#data  结果:[{'name': '张三', 'height': 175}, {'name': '李四', 'height': 165}, {'name': '王五', 'height': 185}]
#result 结果:[{'name': '李四', 'height': 165}, {'name': '张三', 'height': 175}, {'name': '王五', 'height': 185}]
Python 相关文章推荐
Python中几种操作字符串的方法的介绍
Apr 09 Python
python 实现自动远程登陆scp文件实例代码
Mar 13 Python
浅谈Django学习migrate和makemigrations的差别
Jan 18 Python
在Windows中设置Python环境变量的实例讲解
Apr 28 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
numpy中矩阵合并的实例
Jun 15 Python
Python实现查询某个目录下修改时间最新的文件示例
Aug 29 Python
PyQt弹出式对话框的常用方法及标准按钮类型
Feb 27 Python
TensorFlow MNIST手写数据集的实现方法
Feb 05 Python
Python集成开发工具Pycharm的安装和使用详解
Mar 18 Python
详解python 内存优化
Aug 17 Python
python利用递归方法实现求集合的幂集
Sep 07 Python
python代码 输入数字使其反向输出的方法
Dec 22 #Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 #Python
浅谈Pandas:Series和DataFrame间的算术元素
Dec 22 #Python
对Python3.x版本print函数左右对齐详解
Dec 22 #Python
对pandas的算术运算和数据对齐实例详解
Dec 22 #Python
Python使用pandas对数据进行差分运算的方法
Dec 22 #Python
利用arcgis的python读取要素的X,Y方法
Dec 22 #Python
You might like
php实现aes加密类分享
2014/02/16 PHP
ThinkPHP之A方法实例讲解
2014/06/20 PHP
js function使用心得
2010/05/10 Javascript
JavaScript中标识符提升问题
2015/06/11 Javascript
js判断移动端是否安装某款app的多种方法
2015/12/18 Javascript
Markdown+Bootstrap图片自适应属性详解
2016/05/21 Javascript
AngularJS实现ajax请求的方法
2016/11/22 Javascript
bootstrap手风琴折叠示例代码分享
2017/05/22 Javascript
DVA框架统一处理所有页面的loading状态
2017/08/25 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
angular 内存溢出的问题解决
2018/07/12 Javascript
微信小程序 简易计算器实现代码实例
2019/09/02 Javascript
JavaScript检测是否开启了控制台(F12调试工具)
2020/10/02 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
[06:07]刀塔密之二:攻之吾命受之吾幸
2014/07/03 DOTA
python处理中文编码和判断编码示例
2014/02/26 Python
零基础写python爬虫之使用Scrapy框架编写爬虫
2014/11/07 Python
使用Python的判断语句模拟三目运算
2015/04/24 Python
python在windows下创建隐藏窗口子进程的方法
2015/06/04 Python
python使用arcpy.mapping模块批量出图
2017/03/06 Python
Python中Scrapy爬虫图片处理详解
2017/11/29 Python
在windows下Python打印彩色字体的方法
2018/05/15 Python
python使用wxpy实现微信消息防撤回脚本
2019/04/29 Python
python应用文件读取与登录注册功能
2019/09/23 Python
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
荷兰电脑专场:Paradigit
2018/05/05 全球购物
结构工程研究生求职信
2013/10/13 职场文书
专科毕业生学习生活的自我评价
2013/10/26 职场文书
保护环境建议书300字
2014/05/13 职场文书
2015毕业生实习期工作总结
2015/04/09 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
会计入职心得体会
2016/01/22 职场文书
Windows安装Anaconda3的方法及使用过程详解
2021/06/11 Python
angular4实现带搜索的下拉框
2022/03/25 Javascript
Mysql表数据比较大情况下修改添加字段的方法实例
2022/06/28 MySQL
volatile保证可见性及重排序方法
2022/08/05 Java/Android