sort和sorted的参数

sort和sorted都有三个关键字参数:cmp、key和reverse。L.sort(cmp=None, key=None, reverse=False) -- stable sort *IN PLACE*;

cmp(x, y) -> -1, 0, 1

sorted(iterable, cmp=None, key=None, reverse=False) --> new sorted list

首选使用key和reverse,因为它们比等效的cmp工作much faster。

key应该是一个函数,它接受一个项并返回一个要比较和排序的值。reverse允许反转排序顺序。

使用key参数

您可以使用operator.itemgetter作为一个关键参数来按元组中的第二个、第三个等项排序。

示例>>> from operator import itemgetter

>>> a = range(5)

>>> b = a[::-1]

>>> c = map(lambda x: chr(((x+3)%5)+97), a)

>>> sequence = zip(a,b,c)

# sort by first item in a tuple

>>> sorted(sequence, key = itemgetter(0))

[(0, 4, 'd'), (1, 3, 'e'), (2, 2, 'a'), (3, 1, 'b'), (4, 0, 'c')]

# sort by second item in a tuple

>>> sorted(sequence, key = itemgetter(1))

[(4, 0, 'c'), (3, 1, 'b'), (2, 2, 'a'), (1, 3, 'e'), (0, 4, 'd')]

# sort by third item in a tuple

>>> sorted(sequence, key = itemgetter(2))

[(2, 2, 'a'), (3, 1, 'b'), (4, 0, 'c'), (0, 4, 'd'), (1, 3, 'e')]

解释

序列可以包含任何对象,甚至不可比较,但是如果我们可以定义一个函数,该函数可以为每个项生成可比较的内容,那么我们可以在key参数中将该函数传递给sort或sorted。

尤其是itemgetter,创建这样一个函数,从操作数中获取给定项。其文档中的一个示例:After, f=itemgetter(2), the call f(r) returns r[2].

小型基准,key与cmp

只是出于好奇,key和cmp性能相比,越小越好:>>> from timeit import Timer

>>> Timer(stmt="sorted(xs,key=itemgetter(1))",setup="from operator import itemgetter;xs=range(100);xs=zip(xs,xs);").timeit(300000)

6.7079150676727295

>>> Timer(stmt="sorted(xs,key=lambda x:x[1])",setup="xs=range(100);xs=zip(xs,xs);").timeit(300000)

11.609490871429443

>>> Timer(stmt="sorted(xs,cmp=lambda a,b: cmp(a[1],b[1]))",setup="xs=range(100);xs=zip(xs,xs);").timeit(300000)

22.335839986801147

因此,使用key排序的速度似乎至少是使用cmp排序的速度的两倍。使用itemgetter而不是lambda x: x[1]会使排序更快。

pythonsort参数_Python sort()函数有哪些参数?相关推荐

  1. python函数可变参数_python中函数的可变参数

    知识回顾: 1.函数关键字参数 2.函数的参数的默认值.必须从右边写到左边. 本节视频教程 文字教程开始: 一.[其实已经用过]可变参数 回顾系统自带的可变参数函数print #系统自带的可变参数函数 ...

  2. python收集参数_Python 中函数的 收集参数 机制

    定义函数的时候,在参数前加了一个 * 号,函数可以接收零个或多个值作为参数.返回结果是一个元组. 传递零个参数时函数并不报错,而是返回一个空元组.但以上这种方法也有局限性,它不能收集关键字参数. 对关 ...

  3. python函数默认参数_Python中函数的默认参数问题

    前几天,运营反馈了一个BUG,某些数据在写入数据库后,其时间字段出现异常,与当前时间相差较多. 由于代码是不是我写的,所以开始一遍阅读代码一遍排查问题. 在主流程中,仅仅发现了一个对时间赋值的语句,并 ...

  4. python函数如何实现可变参数_python之函数定义可变参数(任意数量参数)

    原博文 2020-05-23 11:49 − python中函数可以定义任意数量的参数,即可变参数. 比如: def fun(*args): print args 在可变参数的名字前面加一个*号,即可 ...

  5. python可变参数和关键字参数位置_python中函数的默认参数和可变长参数如何排列?...

    参数在python中总是通过赋值进行传递的.在默认情况下,参数是通过其位置进行匹配的,从左到右,而且必须精确的传递和函数头部参数名一样多的参数. 这种默认的传递方式很简单 def f(a,b,c): ...

  6. python 函数的调用的时候参数的传递_python定义函数时的参数调用函数时的传参...

    一.定义函数: 1.位置参数:直接定义参数 2.默认参数(或者关键字参数):参数名 = "默认值" 3.位置参数必须在默认参数之前 二.调用函数: 1.按位置传,直接写参数的值 2 ...

  7. python 函数参数_python之函数(二)——函数参数详解

    今天,我们要学习的是函数中的一个重要的概念--参数. 废话不多说,直接进入正题,下面我们看一段简单代码: def add(a, b): # 1 形参 sum = a + b return sum a ...

  8. python自定义函数参数_python自定义函数的参数之四种表现形式

    (1)def a(x,y):print x,y 这是最常见的定义方式,调用该函数,a(1,2)则x取1,y取2,形参与实参相对应,如果a(1)或者a(1,2,3)则会报错 (2)def a(x,y=3 ...

  9. python可变参数函数二阶导数公式_python中函数的可变参数

    简介 INTRODUCTION一.[其实已经用过]可变参数 二.可变参数+普通参数 结合用法1 三.知识要点总结强调 知识回顾: 1.函数关键字参数 2.函数的参数的默认值.必须从右边写到左边. 一. ...

最新文章

  1. mysql数据库主从配置
  2. C/Cpp / 设计模式 / 简单工厂模式
  3. Harfbuzz API 基本用法
  4. XShell技巧收集
  5. 【渝粤教育】国家开放大学2018年春季 0111-22T妇产科护理学 参考试题
  6. [渝粤题库]西北工业大学大学物理
  7. ajax菜鸟教程html,菜鸟教程--AJAX
  8. nohup 命令的简单理解
  9. 三级数据库笔记(完整)
  10. 【操作系统】_7种进程调度算法
  11. 时间序列的平稳性检验方法汇总
  12. 魔兽世界服务器显示新,《魔兽世界》怀旧服再开新服,背后的原因竟然是!
  13. 从‘心’出发,乐跑向前——德州站健心跑公益活动盛大开跑
  14. 2023高频经典前端面试题(es6+webpack+http网络+性能优化中篇,含答案)
  15. 极客日报:贾跃亭回应是否有回国打算:那必须的;顺丰将拿出 2 亿元给快递员加薪;OpenAI 宣布解散机器人团队
  16. 案例分享 | 设计单位主导EPC项目实践经验
  17. 数字中国理念引领国企人力资源数字化转型与实践
  18. mysql索引的使用
  19. 2020前端面试题及答案汇总
  20. 2014室内设计师速成宝典3Dmax CAD PS vray

热门文章

  1. 第十六章 SQL命令 CREATE TABLE(三)
  2. 科技人才开发效率的空间杜宾模型分析
  3. win10系统降级安装win7电脑系统教学
  4. 淘宝天猫商品sku详细信息API接口
  5. 推荐 7 个 yyds 的开源项目
  6. UISlider实现背景图
  7. 我的理想,我的奋斗目标
  8. Vertica数据库介绍
  9. The Open Group即将举办线上线下企业架构从业者峰会
  10. 计算机无法删除ie,ie无法删除怎么办