Python3实现对列表按元组指定列进行排序的方法分析
本文实例讲述了Python3实现对列表按元组指定列进行排序的方法。分享给大家供大家参考,具体如下:
Python版本:python3.+
运行环境:MacOS
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=lambdax:(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')]
其中的lambdax:(x[0],x[1].lower()可以理解为一个匿名函数;
其功能类似于:
deffun(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=lambdax:(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=lambdax:(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}]
PS:这里再为大家推荐一款关于排序的演示工具供大家参考:
在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys
更多关于Python相关内容感兴趣的读者可查看本站专题:《Python数据结构与算法教程》、《Python列表(list)操作技巧总结》、《Python编码操作技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》及《Python入门与进阶经典教程》
希望本文所述对大家Python程序设计有所帮助。