sort和sorted深入理解----引子:多维列表,如何实现第一个元素升序,第二个元素降序
一、列表内建方法--sort()
作用:就地对列表排序(直接在原列表上做排序)
语法:
list.sort(func=None, key=None, reverse=False)
- 当reverse=False时:正向排序;当reverse=True时:逆向排序。默认为False。
- 执行完后会改变原来的list,如果你不需要原来的list,这种效率稍微高点
- 该方法没有返回值
例子:
>>> arr = [2,8,4,6,9,1,3]
>>> arr.sort()
>>> arr
[1, 2, 3, 4, 6, 8, 9]
二、内建函数sorted()
作用:对可迭代对象排序,返回一个新的已经排序好的list
差别:
- sorted()不会改变原来的list,而是会返回一个新的已经排序好的list
- list.sort()方法只是应用在 list 上的方法,而sorted()可用于任何一个可迭代对象
语法:
sorted(iterable, key=None, reverse=False)
- 当reverse=False时:为正向排序;当reverse=True时:为反向排序。默认为False。
- 执行完后返回一个新的排序好的list
例子:
>>> arr = (3,6,7,2,1,4)
>>> sorted(arr)
[1, 2, 3, 4, 6, 7]
三、高级用法
参数key:
参数key:带一个参数的函数(排序时,会依次传入列表的每一项,作为该函数的参数)。该函数用于在比较排序之前进行的操作
例子:
每个字符串比较之前,需要统一小写
>>> test=["A","a","E","W","o"]
>>> test.sort()
>>> test
['A', 'E', 'W', 'a', 'o']
>>> test.sort(key=lambda x:x.lower())
>>> test
['A', 'a', 'E', 'o', 'W']
对于复杂的对象,使用对象的下标作为key。
例子:
>>> student_tuples = [
... ('john', 'A', 15),
... ('jane', 'B', 12),
... ('dave', 'B', 10),
... ]
>>> sorted(student_tuples, key=lambda student: student[2]) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
使用对象的属性进行操作:
>>> class Student:
... def __init__(self, name, grade, age):
... self.name = name
... self.grade = grade
... self.age = age
... def __repr__(self):
... return repr((self.name, self.grade, self.age))
>>>
>>> student_objects = [
... Student('john', 'A', 15),
... Student('jane', 'B', 12),
... Student('dave', 'B', 10),
... ]
>>> sorted(student_objects, key=lambda student: student.age) # sort by age
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
重点来了!
1.多维数组,如何在按照第一个元素排序的基础上,再按第二个关键字进行排序?
>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key = lambda x:(x[0],x[1]))
[('a', 5), ('c', 2), ('d', 1), ('d', 2), ('d', 3)]
2.多维数组,如何实现第一个元素按升序,第二个元素按降序来排列?
>>> arr = [('d',3),('a',5),('d',1),('c',2),('d',2)]
>>> sorted(arr, key=lambda x:(x[0], -int(x[1])))
[('a', 5), ('c', 2), ('d', 3), ('d', 2), ('d', 1)]
sort和sorted深入理解----引子:多维列表,如何实现第一个元素升序,第二个元素降序的更多相关文章
- [python学习] 语言基础—排序函数(sort()、sorted()、argsort()函数)
python的内建排序函数有 sort.sorted两个. 1.基础的序列升序排序直接调用sorted()方法即可 ls = list([5, 2, 3, 1, 4]) new_ls = sorted ...
- sort、sorted、heapq、bisect排序
aa=[1,2,8,7,0,13,28,3]sorted(aa) #原list不变,从小到大排序 aa.sort() #改变原lisaa.sort(reverse=True) #反转 for i in ...
- python中sort与sorted区别
1.sort()函数 (只对list有用) sort(...) L.sort(key = None,reverse=False) key = 函数 这个函数会从每个元素中提取一个用于比较的关键字.默认 ...
- C# List.sort排序详解(多权重,升序降序)
很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...
- C# List.sort排序(多权重,升序降序)
很多人可能喜欢Linq的orderBy排序,可惜U3D里面linq在Ios上会报错,所以就必须使用list的排序. 其实理解了并不难 升序降序比较 sort有三种结果 1,-1,0分别是大,小,相等. ...
- Python创建二维列表的正确姿势
Python创建二维列表的正确姿势 简介 Python中没有数组,使用list结构代替,并且list结构的功能更加强大: 支持动态扩容,无需担心元素过量 对list内的元素类型不做一致性约束 提供丰富 ...
- python 排序 sort和sorted
当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建方法sort() 可以直接对列表进行排序 用法: list. ...
- sort与sorted的区别及实例
描述 我们需要对List进行排序,Python提供了两个方法对给定的List L进行排序 : 方法1.用对List的成员函数sort进行排序方法2.用内置函数sorted进行排序(从2.4开始) so ...
- Python中的排序方法sort(),sorted(),argsort()等
python 列表排序方法sort.sorted技巧篇 转自https://www.cnblogs.com/whaben/p/6495702.html,学习参考. Python list内置sort( ...
随机推荐
- qt的应用层主要是大型3d,vr,管理软件和器械嵌入软件(有上千个下一代软件黑科技项目是qt的,美国宇航局,欧洲宇航局,超级战舰DDG1000)
作者:Nebula.Trek链接:https://www.zhihu.com/question/24316868/answer/118944490来源:知乎著作权归作者所有.商业转载请联系作者获得授权 ...
- MAT 专题
http://smallnetvisitor.iteye.com/blog/1826434 运行user任务管理器查看到的pid号:
- MFC中获取App,MainFrame,Doc和View类等指针的方法
From: http://hi.baidu.com/wxnxs/item/156a68f5b3b4ed18e3e3bd03 MFC中获取App,MainFrame,Doc和View类等指针的方法 ...
- 在运行Hfile的MR如果任务client结束OOM
在运行MR将HDFS转换成HFile什么时候.例如,会发生以下的异常: 14/07/09 18:02:59 INFO mapred.JobClient: map 83% reduce 0% 14/0 ...
- Invalid default value for 'created_at'
https://github.com/laravel/framework/issues/15144 https://stackoverflow.com/questions/30555844/larav ...
- SQLServer 订阅过期解决方法
原文:SQLServer 订阅过期解决方法 由于分发数据库执行一个较长的事务,达到了系统预定的72小时,导致了该订阅过期,数据库分发代理已不可再启用,提示错误如下: 错误信息:已将此(这些)订阅标记为 ...
- .Net 通过Cmd执行Adb命令 /c参数
通过cmd.exe来执行adb命令,可以进行一些命令组合,直接用adb.exe的话只能执行单个adb命令 这里要注意cmd 中的/c参数,指明此参数时,他将执行整个字符串中包含的命令并退出当前cmd运 ...
- 如何在项目中添加Log4net_web.config
<log4net> <appender name="ConsoleAppender" type="log4net.Appender.ConsoleApp ...
- ASP.NET MVC视图
前言 视图即是用户与Web应用程序的接口,用户通常会看到视图,然后在视图上进行交互,Web应用程序的视图通常是HTML格式. 首先了解控制器选择返回哪个视图的问题.新建一个项目,浏览到/Home/Ab ...
- C++数组指针、指针数组、函数指针的核心概念
1.什么叫数组指针? 数组指针:一个指向一维或者多维数组的指针. 比如:int * b=new int[10];指向一维数组的指针b ; 注意,这个时候释放空间一定要delete [] ,否则会造成内 ...