很多时候,我们需要对List进行排序,Python提供了两个方法
对给定的List L进行排序,
方法1.用List的成员函数sort进行排序
方法2.用built-in函数sorted进行排序(从2.4开始)
这两种方法使用起来差不多,以第一种为例进行讲解:
从Python2.4开始,sort方法有了三个可选的参数,Python Library Reference里是这样描述的
cmp:cmp specifies a custom comparison function of two arguments (iterable elements) which should return a negative, zero or positive number depending on whether the first argument is considered smaller than, equal to, or larger than the second argument:
"cmp=lambda x,y: cmp(x.lower(), y.lower())"
key:key specifies a function of one argument that is used to extract a comparison key from each list element: "key=str.lower"
reverse:reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.In general, the key and reverse conversion processes are much faster than specifying an
equivalent cmp function. This is because cmp is called multiple times for each list element while key and reverse touch each element only once.
以下是sort的具体实例。
实例1:
>>>L = [2,3,1,4]
>>>L.sort()
>>>L
>>>[1,2,3,4]
实例2:
>>>L = [2,3,1,4]
>>>L.sort(reverse=True)
>>>L
>>>[4,3,2,1]
实例3:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(cmp=lambda x,y:cmp(x[1],y[1]))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
实例4:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>L.sort(key=lambda x:x[1])
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
实例5:
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>import operator
>>>L.sort(key=operator.itemgetter(1))
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
实例6:(DSU方法:Decorate-Sort-Undercorate)
>>>L = [('b',2),('a',1),('c',3),('d',4)]
>>>A = [(x[1],i,x) for i,x in enumerate(L)] #i can confirm the stable sort
>>>A.sort()
>>>L = [s[2] for s in A]
>>>L
>>>[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
以上给出了6中对List排序的方法,其中实例3.4.5.6能起到对以List item中的某一项
为比较关键字进行排序.
效率比较:
cmp < DSU < key
通过实验比较,方法3比方法6要慢,方法6比方法4要慢,方法4和方法5基本相当
多关键字比较排序:
实例7:
>>>L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:x[1])
>>> L
>>>[('d', 2), ('c', 2), ('b', 3), ('a', 4)]
我们看到,此时排序过的L是仅仅按照第二个关键字来排的,如果我们想用第二个关键字
排过序后再用第一个关键字进行排序呢?有两种方法
实例8:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=lambda x:(x[1],x[0]))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
实例9:
>>> L = [('d',2),('a',4),('b',3),('c',2)]
>>> L.sort(key=operator.itemgetter(1,0))
>>> L
>>>[('c', 2), ('d', 2), ('b', 3), ('a', 4)]
为什么实例8能够工作呢?原因在于tuple是的比较从左到右之一比较的,比较完第一个,如果
相等,比较第二个

=======================================
>>>L = [{"type": 0, "name": "hhhh", "size": 2}, {"type": 1, "name": "uuuu", "size": 12341234}, {"type": 1, "name": "kkkk", "size": 234}]
>>>L.sort(key=operator.itemgetter('type'))
>>>L.sort(key=lambda x:x['type'])

转载于:https://blog.51cto.com/ponyjia/1393446

Python中对list进行排序相关推荐

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

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

  2. python 多条件 选择 算法_浅析Python中的多条件排序实现

    多条件排序及itemgetter的应用曾经客户端的同事用as写一大堆代码来排序,在得知Python排序往往只需要一行,惊讶无比,遂对python产生浓厚的兴趣. 之前在做足球的积分榜的时候需要用到多条 ...

  3. python 怎么让列表里的数从大到小排列,python中如何给列表排序

    这篇文章主要介绍了Python中对列表排序实例,需要的朋友可以参考下 很多时候,我们需要对List进行排序,Python提供了两个方法,对给定的List L进行排序: 方法1.用List的成员函数so ...

  4. python中字典不自动排序/删除指定类型文件/执行可执行文件的返回值

    1.python 字典的用法 from collections import OrderedDict dict =OrderedDict() dict['foo']=3 dcit['aol']=1 2 ...

  5. python中对字典进行排序_python如何给字典排序

    在python里,字典dictionary是内置的数据类型,是个无序的存储结构,每一元素是key-value对: 如:dict = {'username':'xiaoming','password': ...

  6. 面试刷题必看!Python中的5大排序算法及其实现代码

    排序是每个 IT 工程师和开发人员必备的知识技能.不仅要通过编程面试,而且要了解算法本身.不同的排序算法完美地展示了算法设计如何对程序的复杂性.速度和效率产生如此大的影响. 让我们来看看排名前5,也是 ...

  7. python中dict和list排序

    1.list排序    列表的排序是python内置功能,自身含有sort方法    如:    >>> s=[2,1,3,0]    >>> s.sort()   ...

  8. Python中argsort()、lexsort()排序的用法

    一.argsort()函数的用法: 先给个例子,将下面的叙述与本例结合使用. arr = np.array([7,9,5,2,9,4,3,1,4,3]) print('原数组:',arr) print ...

  9. python按日期排序_你如何在python中获得按创建日期排序的目录列表?

    jfs.. 55 这是一个更详细@Greg Hewgill的答案.它最符合问题要求.它区分了创建和修改日期(至少在Windows上). #!/usr/bin/env python from stat ...

  10. python汉字排序规则_根据规则对python中的列表进行排序

    返回每个项目的元组: sorted(yourlist, key=lambda x: (not x.startswith('pt='), x)) 这将首先对以pt =开头的任何值进行排序(如False在 ...

最新文章

  1. 苹果硬盘容量启动linux,你的MAC OS之旅
  2. OC系列foundation Kit基础-NSDate
  3. linux 线程与CPU绑定
  4. 代码和产品发布的几种方式
  5. Python中递增和递减运算符的行为
  6. rails采用MongoDB感觉相当不错!
  7. 大数据胸_喂母乳会导致胸下垂?!你被这个谣言骗了多少年?
  8. 实战 SQL Server 2008 数据库误删除数据的恢复 (转)
  9. 我的世界服务器物品id错误,我的世界错误代码,怎么弄
  10. vue 获取元素高度
  11. 剑指offer——面试题46:求1+2+...+n
  12. 用animation制作走马灯
  13. sqoop简单的demo 先跑起来再说
  14. 遗传算法c语言程序二次方程,遗传算法的c语言程序.doc
  15. jtopo node.text换行_jTopo学习笔记1
  16. 中望3d快捷键命令大全_3d快捷键怎么设置|中望3D快捷键设置
  17. 笔记本连接显示器后没有声音_笔记本外接显示器后没声音怎么回事
  18. LOJ.6073.[2017山东一轮集训Day5]距离(可持久化线段树 树链剖分)
  19. 机器学习Machine Learning:特征选择Feature Selection 与 数据降维Dimension Reduction的区别?
  20. 51nod 1299 监狱逃离 树形DP

热门文章

  1. 深度学习:注意力模型Attention Model
  2. c 语言程序设计形考任务一,C语言程序设计形考任务.doc
  3. vnc 序列号在哪输入_VNC Viewer Plus 1.2.3 注册机
  4. Android 自动轮播图+滑动效果
  5. 数论 (大数,小费马定理,欧拉定理,威尔逊定理,快速数论变换(NNT)模版)...
  6. [六省联考2017]分手是祝愿
  7. CSS概述 CSS声明
  8. Mac 10.12安装迅雷2.7.2
  9. Swift - 通过url地址打开web页面
  10. show,hide与fadeIn、fadeOu的区别