共同点

都有三个参数,

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. app发布流程

    在app上架之前做两件事(instruments,profile): 1.代码静态分析:不用运行程序,直接检测代码有没有潜在的一些内存泄漏 2.动态分析:a l loctions/leaks 内存溢出 ...

  2. ORA-01031: insufficient privileges 解决办法

    sysdba不能远程登录这个也是一个很常见的问题了. 碰到这样的问题我们该如何解决呢? 我们用sysdba登录的时候,用来管理我们的数据库实例,特别是有时候,服务器不再本台机器,这个就更是有必要了. ...

  3. !important的用法(IE6 兼容的解决方法)

    我们知道,CSS写在不同的地方有不同的优先级, .css文件中的定义 < 元素style中的属性,但是如果使用!important,事情就会变得不一样. 首先,先看下面一段代码: <!DO ...

  4. JS判断按时间跳转到相应的页面

    <!--时间段跳转js--><script language="javaScript" type="text/javascript"> ...

  5. html5--3.2 input元素(1)

    html5--3.2 input元素(1) 学习要点 input元素及其属性 input元素 用来设置表单中的内容项,比如输入内容的文本框,按钮等 不仅可以布置在表单中,也可以在表单之外的元素使用 i ...

  6. Android中的ProgressBar的android:indeterminate

    不明确(false)就是滚动条的当前值自动在最小到最大值之间来回移动,形成这样一个动画效果,这个只是告诉别人“我正在工作”,但不能提示工作进度到哪个阶段.主要是在进行一些无法确定操作时间的任务时作为提 ...

  7. CollectionView垂直缩放卡片布局

    实现效果 实现思路 从效果图可以看到变化是,越是往中间滚动的item显示最大,越显眼.而越是往前面,或者越是后面的,反而显示越小,这样就形成了视觉差. 实现的思路就是通过重写在可见范围内的所有item ...

  8. SPOJ:Harbinger vs Sciencepal(分配问题&不错的DP&bitset优化)

    Rainbow 6 is a very popular game in colleges. There are 2 teams, each having some members and the 2 ...

  9. node fs模块

    Node.js的文件系统的Api //公共引用 var fs = require('fs'), path = require('path'); 1.读取文件readFile函数 //readFile( ...

  10. 如何在XCode中更改iPhone或iPad模拟器类型

    如何在XCode中更改iPhone或iPad模拟器类型 参考方法一(永久,一旦设置后,每次运行指定的模拟器):(1)选择顶层菜单Project 中的 Set Active Executable(2)根 ...