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 time模块详解(常用函数实例讲解,非常好)
Apr 24 Python
在Python中用keys()方法返回字典键的教程
May 21 Python
在Python中操作时间之mktime()方法的使用教程
May 22 Python
Python爬取网页中的图片(搜狗图片)详解
Mar 23 Python
Pycharm学习教程(5) Python快捷键相关设置
May 03 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
Python利用splinter实现浏览器自动化操作方法
May 11 Python
Python定时任务sched模块用法示例
Jul 16 Python
Python面向对象程序设计多继承和多态用法示例
Apr 08 Python
Python使用百度翻译开发平台实现英文翻译为中文功能示例
Aug 08 Python
python和php学习哪个更有发展
Jun 17 Python
python图像处理 PIL Image操作实例
Apr 09 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 GD绘制24小时柱状图
2008/06/28 PHP
Codeigniter上传图片出现“You did not select a file to upload”错误解决办法
2014/06/12 PHP
php实现购物车功能(下)
2016/01/05 PHP
PHP删除数组中指定下标的元素方法
2018/02/03 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
一个XML格式数据转换为图表的例子
2010/02/09 Javascript
JavaScript 放大镜 放大倍率和视窗尺寸
2011/05/09 Javascript
查看源码的工具 学习jQuery源码不错的工具
2011/12/26 Javascript
JSON.stringify 语法实例讲解
2012/03/14 Javascript
js数组循环遍历数组内所有元素的方法
2014/01/18 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
javascript编写实用的省市选择器
2015/02/12 Javascript
JS实现横向拉伸动感伸缩菜单效果代码
2015/09/04 Javascript
JavaScript中Window对象的属性及事件
2015/12/25 Javascript
AngularJS中监视Scope变量以及外部调用Scope方法
2016/01/23 Javascript
JavaScript中有关一个数组中最大值和最小值及它们的下表的输出的解决办法
2016/07/01 Javascript
jQuery Ajax自定义分页组件(jquery.loehpagerv1.0)实例详解
2017/05/01 jQuery
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
JavaScript原型式继承实现方法
2019/11/06 Javascript
vue搜索页开发实例代码详解(热门搜索,历史搜索,淘宝接口演示)
2020/04/11 Javascript
Python异常处理总结
2014/08/15 Python
Python解决鸡兔同笼问题的方法
2014/12/20 Python
Python爬虫抓取手机APP的传输数据
2016/01/22 Python
Python 常用 PEP8 编码规范详解
2017/01/22 Python
Python实现的计数排序算法示例
2017/11/29 Python
python实现动态数组的示例代码
2019/07/15 Python
Python模块的定义,模块的导入,__name__用法实例分析
2020/01/07 Python
Python @property原理解析和用法实例
2020/02/11 Python
用HTML5实现鼠标滚轮事件放大缩小图片的功能
2015/06/25 HTML / CSS
西班牙家用电器和电子产品购物网站:Mi Electro
2019/02/25 全球购物
一套带答案的C++笔试题
2014/01/10 面试题
卫生院健康教育实施方案
2014/06/07 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
教你怎么用python selenium实现自动化测试
2021/05/27 Python
PHP中国际化的字符串排序和比较对象详解
2021/08/23 PHP