共同点

都有三个参数,

cmp用户自定义(指定函数),每个元素都会调用,效率没key高

key带一个参数的函数,用来为每个元素提取比较值

reverse=True    翻转

sort

sort作用的对象一般是列表

sort直接排序后就改变了自己,不用生成新的对象,所以效率更高

>>> m=[1,2,3,4,5]

>>> m.sort(reverse=True

>>> m

[5, 4, 3, 2, 1]

>>> m

['This', 'is', 'a', 'test', 'string', 'from', 'Andrew']

>>> m.sort()

>>> m

['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']

>>> m.sort(key=str.lower)

>>> m

['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']

sorted

python的内置函数

能够接受一切可迭代的对象

排序后不会改变自身,会新建一个对象,因此效率较低,但功能强大

对字典的排序(只是key)

>>> sorted({1: 'D', 2: 'B', 3: 'B', 4: 'E', 5: 'A'})

[1, 2, 3, 4, 5]

>>> sorted("This is a test string from Andrew".split(), key=str.lower)

['a', 'Andrew', 'from', 'is', 'string', 'test', 'This']                        #和上面的sort也可以

key参数需要指定一个函数,这个函数一个需要一个参数,且返回一个可用来比较的权值

这个函数仅仅会调用一次,比cmp参数指定的函数效率要高

我们可以使用operator中itemgetter, attrgetter, methodcaller来快速定义key函数,

>>> from operator import itemgetter, attrgetter, methodcaller

>>> sorted(student_tuples, key=itemgetter(1,2))            #允许多级比较

[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]            #和上面的sort也可以

>>> test            #字典同样也可以多级比较,只不过是指定key

[{'grade': 'A', 'score': 15, 'name': 'john'}, {'grade': 'B', 'score': 10, 'name': 'dave'}, {'grade': 'B', 'score': 12, 'name': 'jane'}]

>>> sorted(test, key=itemgetter('score','grade') )

[{'grade': 'B', 'score': 10, 'name': 'dave'}, {'grade': 'B', 'score': 12, 'name': 'jane'}, {'grade': 'A', 'score': 15, 'name': 'john'}]

使用attrgetter,可以对 对象的属性进行排序等

sorted(student_objects, key=attrgetter('grade', 'age'))

[('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

对字典排序:

>>> test                #按分数排再按等级排

{'sun': ['E', 3], 'zhao': ['A', 90], 'wang': ['A', 88], 'li': ['B', 75]}

>>> sorted(test.iteritems(), key=lambda x: (x[1][1],x[1][0]))

[('sun', ['E', 3]), ('li', ['B', 75]), ('wang', ['A', 88]), ('zhao', ['A', 90])]

python中的sort和sorted的更多相关文章

  1. Python中的 sort 和 sorted

    今天在做一道题时,因为忘了Python中sort和sorted的用法与区别导致程序一直报错,找了好久才知道是使用方法错误的问题!现在就大致的归纳一下sort和sorted的用法与区别 1. sort: ...

  2. python中的sort、sorted、reverse、reversed详解

    python语言中的列表排序方法有三个:reverse反转/倒序排序.sort正序排序.sorted可以获取排序后的列表.在更高级列表排序中,后两中方法还可以加入条件参数进行排序. reverse() ...

  3. python中list.sort()与sorted()的区别

    list.sort()和sorted()都是python的内置函数,他们都用来对序列进行排序,区别在于 list.sort()是对列表就地(in-place)排序,返回None:sorted()返回排 ...

  4. python中的sort、sorted排序

    我们通常会遇到对数据库中的数据进行排序的问题,今天学习一下对列表和字典的排序方法. 列表 第一种:内建方法sort sort()对列表排序是永久性的排序. 用法:sort(*, key=None, r ...

  5. python中的sort方法

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...

  6. python中的sort方法使用详解

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不 ...

  7. Python中的sort()

    Python中的sort()方法用于数组排序,本文以实例形式对此加以详细说明: 一.基本形式列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可 ...

  8. 第8.23节 Python中使用sort/sorted排序与“富比较”方法的关系分析

    一. 引言 <第8.21节 Python中__lt__.gt__等 "富比较"("rich comparison")方法用途探究>和<第8.2 ...

  9. python中的sort方法和sorted方法

    一.sort()函数 描述 sort() 函数用于对原列表进行排序,如果指定参数,则使用比较函数指定的比较函数. 语法 sort()方法语法: 1 list.sort(cmp=None, key=No ...

随机推荐

  1. NSTimer 使用小结

    目录 1. NSRunLoopCommonModes和Timer 2. NSThread和Timer 3. GCD中的Timer 返回目录 1. NSRunLoopCommonModes和Timer ...

  2. HDU 5438 Ponds

    Ponds Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Sub ...

  3. vim使用手册出现 找到 tag:1/9或更多 查看别的定义的方法

    :ts 或 tselect 查看有相同地方的定义 通过这种方式会出现一个列表,输入:q 然后通过数字键和回车查看某一个定义,个人经常用:ts :tn或tnext 查找下一个定义地方. :tp 查找上一 ...

  4. js实现域名判断后跳转到指定网址

    js实现域名判断后跳转到指定网址,也适用于同一虚拟空间放多个网站: <script>       try           {               if(self.locatio ...

  5. 利用JS判断当前来路域名并跳转到指定页面

    某网站绑定了多个域名,默认情况下访问这些域名的时候是指向网站的首页,也就是访问不同域名时看到的页面是一样的,现在需要访问不同域名时显示不同页面. 一般情况下,可以用子站绑定域名的方法来实现,访问不同的 ...

  6. poj 2253 Frogger 解题报告

    题目链接:http://poj.org/problem?id=2253 题目意思:找出从Freddy's stone  到  Fiona's stone  最短路中的最长路. 很拗口是吧,举个例子.对 ...

  7. oracle 删除用户命令和部分表空间操作

    删除用户 drop user user_name cascade; 建立表空间 CREATE TABLESPACE data01DATAFILE '/oracle/oradata/db/DATA01. ...

  8. 一步一步学Silverlight 2系列(13):数据与通信之WebRequest

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  9. Linux系统中的运行级别

    什么是运行级呢?简单的说,运行级就是操作系统当前正在运行的功能级别. 它让一些程序在一个级别启动,而另外一个级别的时候不启动. Linux系统的有效登录模式有0~9共十种,不过沿用UNIX系统的至多6 ...

  10. BZOJ_3063_[Usaco2013]Route Designing_DP

    BZOJ_3063_[Usaco2013]Route Designing_DP Description After escaping from the farm, Bessie has decided ...