共同点

都有三个参数,

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. 【bzoj4240】有趣的家庭菜园

    只要统计每一个左右分别有多少比他高的去min,然后求和 #include<algorithm> #include<iostream> #include<cstdlib&g ...

  2. luogu3379 【模板】最近公共祖先(LCA) 倍增法

    题目大意:给定一棵有根多叉树,请求出指定两个点直接最近的公共祖先. 整体步骤:1.使两个点深度相同:2.使两个点相同. 这两个步骤都可用倍增法进行优化.定义每个节点的Elder[i]为该节点的2^k( ...

  3. map数据的分组,list数据排序 数据筛选

    sfit0144 (李四) 2015-01-10 18:00:251Sfit0734 (Sfit0734) 2015-01-10 18:00:38go homesfit0144 (李四) 2015-0 ...

  4. tload

    tload命令以图形化的方式输出当前系统的平均负载到指定的终端.假设不给予终端机编号,则会在执行tload指令的终端机显示负载情形. 语法 tload(选项)(参数) 选项 -s:指定闲时的刻度: - ...

  5. (转)Linux下 SVN客户端安装

    原地址:http://rtxbc.iteye.com/blog/860092 今天有现场程序连svn服务器一直有异常,于是在现场linux下安装svn client来直接测试,看问题原因: 一:安装s ...

  6. CentOS设置代理

      假设我们要设置代理为 IP:PORT1.网页上网网页上网设置代理很简单,在firefox浏览器下 Edit-->>Preferences-->>Advanced--> ...

  7. laravel打印原生语句

    laravel中快捷方便的打印语句的方法步骤一:DB::connection()->enableQueryLog();$data["banner"] = WebsiteBan ...

  8. java nio的一个严重BUG

    java nio的一个严重BUG Posted on 2009-09-28 19:27 dennis 阅读(4588) 评论(5)  编辑  收藏 所属分类: java .源码解读      这个BU ...

  9. SPOJ:Elegant Permuted Sum(贪心)

    Special Thanks: Jane Alam Jan*At moment in University of Texas at San Antonio - USA You will be give ...

  10. 【hdu 4374】One Hundred Layer

    [题目链接] 点击打开链接 [算法] 不难看出,这题可以用动态规划来解决 f[i][j]表示第i行第j列能够取得的最大分数 则如果向右走,状态转移方程为f[i][j]=max{f[i-1][k]+a[ ...