简单记一下python中List的sort方法(或者sorted内建函数)的用法。

List的元素可以是各种东西,字符串,字典,自己定义的类等。

sorted函数用法如下:

sorted(data, cmp=None, key=None, reverse=False)

其中,data是待排序数据,可以使List或者iterator, cmp和key都是函数,这两个函数作用与data的元素上产生一个结果,sorted方法根据这个结果来排序。

cmp(e1, e2) 是带两个参数的比较函数, 返回值: 负数: e1 e2, 0: e1 == e2, 正数: e1 e2. 默认为 None, 即用内建的比较函数.

key 是带一个参数的函数, 用来为每个元素提取比较值. 默认为 None, 即直接比较每个元素.

通常, key 和 reverse 比 cmp 快很多, 因为对每个元素它们只处理一次; 而 cmp 会处理多次.

通过例子来说明sorted的用法:

1. 对由tuple组成的List排序

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

用key函数排序(lambda的用法见 注释1)

sorted(students, key=lambda student : student[2]) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

用cmp函数排序

sorted(students, cmp=lambda x,y : cmp(x[2], y[2])) # sort by age [('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]

用 operator 函数来加快速度, 上面排序等价于:(itemgetter的用法见 注释2)

from operator import itemgetter, attrgetter sorted(students, key=itemgetter(2))

用 operator 函数进行多级排序

sorted(students, key=itemgetter(1,2)) # sort by grade then by age [('john', 'A', 15), ('dave', 'B', 10), ('jane', 'B', 12)]

2. 对由字典排序

d = {'data1':3, 'data2':1, 'data3':2, 'data4':4} sorted(d.iteritems(), key=itemgetter(1), reverse=True) [('data4', 4), ('data1', 3), ('data3', 2), ('data2', 1)]

注释1

参考:http://jasonwu.me/2011/10/29/introduce-to-python-lambda.html

注释2

参考:http://ar.newsmth.net/thread-90745710c90cf1.html

class itemgetter(__builtin__.object) | itemgetter(item, ...) -- itemgetter object | | Return a callable object that fetches the given item(s) from its operand. | After, f=itemgetter(2), the call f(r) returns r[2]. | After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3])

相当于

def itemgetter(i,*a): def func(obj): r = obj[i] if a: r = (r,) + tuple(obj[i] for i in a) return r return func a = [1,2,3] b=operator.itemgetter(1) b(a) 2 b=operator.itemgetter(1,0) b(a) (2, 1) b=itemgetter(1) b(a) 2 b=itemgetter(1,0) b(a) (2, 1)

参考资料:

1. http://www.linuxso.com/linuxbiancheng/13340.html

2. http://www.douban.com/note/13460891/

python list sort by,python中List的sort方法指南相关推荐

  1. python共享文件权限_利用Python实现在同一网络中的本地文件共享方法

    本文利用Python3启动简单的HTTP服务器,以实现在同一网络中共享本地文件. 启动HTTP服务器 打开终端,转入目标文件所在文件夹,键入以下命令: $ cd /Users/zero/Documen ...

  2. Python 绘图问题:Matplotlib中plt.rcParams[]使用方法 rcsetup.py matplotlibrc

    文章目录 from `__init__.py` from matplotlibrc from rcsetup.py from __init__.py # this is the instance us ...

  3. python封装:隐藏对象中的属性或方法(三分钟读懂)

    封装:隐藏对象中的属性或方法 隐藏对象中的属性 隐藏:- 将对象的属性名,修改为一个外部不知道的名字 我们使用时,有特殊方法来处理获取(修改)对象中的属性 获取(修改)对象中的属性 需要提供一个get ...

  4. python import from区别_python中import与from方法总结(推荐)

    一.模块&包简介 模块:所谓模块就是一个.py文件,用来存放变量,方法的文件,便于在其他python文件中导入(通过import或from). 包(package): 包是更大的组织单位,用来 ...

  5. python遍历是什么_python中遍历字典的方法是什么

    python中遍历字典的方法是什么 发布时间:2020-09-01 10:18:57 来源:亿速云 阅读:57 作者:小新 这篇文章将为大家详细讲解有关python中遍历字典的方法是什么,小编觉得挺实 ...

  6. python如何播放视频_python中播放视频的方法有哪些

    python中播放视频的方法有哪些 发布时间:2020-08-25 11:45:52 来源:亿速云 阅读:78 作者:小新 这篇文章给大家分享的是有关python中播放视频的方法有哪些的内容.小编觉得 ...

  7. python暂停命令_Python3.X中运行暂停的方法

    如今,在Python3中已经有很大一部分语句与Python2不互通了,很多功能都有些微的不同,其中运行暂停的方法也有所不同,今天我将带大家了解一下Python3的运行暂停的方法. 1.input(); ...

  8. python填写excel-Python向excel中写入数据的方法

    最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 xlwt依赖包,安装的方法就很简单,直接 p ...

  9. python中类的用法_Python中的类和方法使用举例

    成员变量 对象的创建 创建对象的过程称之为实例化,当一个对象被创建后,包含三个方面的特性对象聚丙属性和方法, 句柄用于区分不同的对象, 对象的属性和方法,与类中的成员变量和成员函数对应, obj = ...

  10. python 子串是否在字符串中_python七种方法判断字符串是否包含子串

    1. 使用 in 和 not in in 和 not in 在 Python 中是很常用的关键字,我们将它们归类为 成员运算符. 使用这两个成员运算符,可以很让我们很直观清晰的判断一个对象是否在另一个 ...

最新文章

  1. 剑指offer之用链表实现栈(带头节点)
  2. 4米乘以12米CAD图_CAD做钣金件展开的原理你知道吗?
  3. Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)
  4. SAR舰船检测的学习笔记
  5. VUE2.0 elemenui-ui 2.0.X 封装 省市区三级
  6. html实现小键盘,js之软键盘实现(源码) _javascript教程
  7. org.jboss.deployers.spi.DeploymentException: Error deploying: file:/jboss/logging.xml或者vsf.xml
  8. solidworks2016安装教程
  9. 对数幅度谱图像matlab,fft2绘制图像的对数幅度谱,比较图像旋转平移和缩放后的频谱.doc...
  10. Nature Reviews Neuroscience综述:认知和行为的灵活性-神经机制和临床考虑
  11. python的语言风格(一)
  12. win7系统服务器停止,Windows7一个月后停止服务支持 Win7将于明年1月14日终止服务 停止服务后还能使用吗?...
  13. 杠杆炒股亏损多少就会被平仓?
  14. 家谱管理系统php,家谱管理系统(含源代码).docx
  15. Unity3D-设置天空盒
  16. 数据网站 免费数据网站
  17. PLC、运动控制卡、运动控制器,傻傻分不清
  18. centos7服务器之基本命令
  19. 原生js小游戏——俄罗斯方块
  20. nn.CrossEntropyLoss总结

热门文章

  1. android+自定义alertdialog,安卓自定义AlertDialog
  2. TCP和IP协议的特点
  3. python arcgis批量绘图_ARCGIS中Python实现批量裁剪
  4. C++混淆点-static关键字理解
  5. c语言编程判断素数的函数,【面试题】C语言:实现一个函数,判断一个数是不是素数。...
  6. 微信中音乐播放在ios不能自动播放解决
  7. 实现多线程Callable接口
  8. ELK篇---------elasticsearch集群安装配置
  9. BZOJ 3697: 采药人的路径 [点分治] [我想上化学课]
  10. 2013年未之wpf项目乱述