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 专题二 条件语句和循环语句的基础知识
Mar 19 Python
urllib和BeautifulSoup爬取维基百科的词条简单实例
Jan 17 Python
python 读入多行数据的实例
Apr 19 Python
关于Python作用域自学总结
Jun 10 Python
Python实现12306火车票抢票系统
Jul 04 Python
Python爬虫:url中带字典列表参数的编码转换方法
Aug 21 Python
python 实现turtle画图并导出图片格式的文件
Dec 07 Python
Django生成PDF文档显示网页上以及PDF中文显示乱码的解决方法
Dec 17 Python
Python类如何定义私有变量
Feb 03 Python
基于python实现检索标记敏感词并输出
May 07 Python
详解Python高阶函数
Aug 15 Python
Python字符串的转义字符
Apr 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
magento后台无法登录解决办法的两种方法
2016/12/09 PHP
jQuery 使用手册(四)
2009/09/23 Javascript
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
jQuery中position()方法用法实例
2015/01/16 Javascript
浅谈jQuery的bind和unbind事件(绑定和解绑事件)
2017/03/02 Javascript
js实现放大镜特效
2017/05/18 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
jquery使用iscorll实现上拉、下拉加载刷新
2017/10/26 jQuery
JS中原始值和引用值的储存方式示例详解
2018/03/23 Javascript
使用node打造自己的命令行工具方法教程
2018/03/26 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
2018/09/03 Javascript
React 组件中的 bind(this)示例代码
2018/09/16 Javascript
node.js命令行教程图文详解
2019/05/27 Javascript
vue实现在线翻译功能
2019/09/27 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
js实现贪吃蛇游戏(简易版)
2020/09/29 Javascript
python发送伪造的arp请求
2014/01/09 Python
Flask框架web开发之零基础入门
2018/12/10 Python
python3.6编写的单元测试示例
2019/08/17 Python
Python实现socket非阻塞通讯功能示例
2019/11/06 Python
Django使用rest_framework写出API
2020/05/21 Python
Python Matplotlib简易教程(小白教程)
2020/07/28 Python
CSS3近阶段篇之酷炫的3D旋转透视
2016/04/28 HTML / CSS
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
Shoes For Crews法国官网:美国领先的防滑鞋设计和制造商
2018/01/01 全球购物
巴西最大的运动品牌:Olympikus
2020/07/14 全球购物
营销与策划个人求职信
2013/09/22 职场文书
会计毕业生自荐信
2013/11/21 职场文书
事业单位接收函
2014/01/10 职场文书
金融事务专业毕业生求职信
2014/02/23 职场文书
医学生职业生涯规划书范文
2014/03/13 职场文书
教育专业毕业生推荐信
2014/07/10 职场文书
单位考核鉴定意见
2015/06/05 职场文书
大学文艺委员竞选稿
2015/11/19 职场文书
2016年领导干部廉政承诺书
2016/03/24 职场文书
开学季:喜迎新生,迎新标语少不了
2019/11/07 职场文书