Python中对列表排序实例

发布时间:2015-01-04 09:01:50 投稿:junjie

这篇文章主要介绍了Python中对列表排序实例,本文给出了9个List的排序实例,需要的朋友可以参考下

很多时候,我们需要对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是的比较从左到右之一比较的,比较完第一个,如果

相等,比较第二个

Python中对列表排序实例的更多相关文章

  1. python中的列表排序

    对列表进行排序是常见的操作,最简单的方式是使用sort()函数. 1.一般用法 不管列表元素是数.字符串还是元组,函数sort()总是就地操作列表,按升序进行排列元素,并返回None. #数 > ...

  2. Python中关于列表排序并保留id/enumerate()使用方法

    新手才开始写博客,不周之处请原谅,有错误请指正. >>> a = [1,4,2,5,3]>>> b = sorted(enumerate(a),key = lamb ...

  3. python中的列表及numpy数组排序

    一.列表排序  # python中对列表排序有sort.sorted两种方法,其中sort是列表内置方法,其帮助文档如下:In [1]: help(sorted) Help on built-in f ...

  4. python中的类和实例

    今天花了两个多小时后搜索相关博客看了看python中有关类和实例的介绍,差不多大概明白了. python中的类和c++中的类是一样的,不同之处就是c++的类,如果含有成员变量,并且成员变量发生变化后, ...

  5. Python编程之列表操作实例详解【创建、使用、更新、删除】

    Python编程之列表操作实例详解[创建.使用.更新.删除] 这篇文章主要介绍了Python编程之列表操作,结合实例形式分析了Python列表的创建.使用.更新.删除等实现方法与相关操作技巧,需要的朋 ...

  6. julia与python中的列表解析.jl

    julia与python中的列表解析.jl #=julia与python中的列表解析.jl 2016年3月16日 07:30:47 codegay julia是一门很年轻的科学计算语言 julia文档 ...

  7. python中argparse模块用法实例详解

    python中argparse模块用法实例详解 这篇文章主要介绍了python中argparse模块用法,以实例形式较为详细的分析了argparse模块解析命令行参数的使用技巧,需要的朋友可以参考下 ...

  8. Python中的列表解析和生成器表达式

    Python中的列表解析和生成器表达式 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.列表解析案例 #!/usr/bin/env python #_*_coding:utf-8 ...

  9. Python中的列表生成式和多层表达式

    Python中的列表生成式和多层表达式 如何生成[1x1, 2x2, 3x3, ..., 10x10]的列表? L=[]; ,): L.append(x*x) print L print (" ...

随机推荐

  1. Java开发笔记(一百一十九)AWT布局

    前面介绍了如何在窗口上添加一个按钮,可是每个软件界面都包含了许多控件,这些控件又是按照什么规则在界面上排列的呢?仍以按钮为例,假如要在窗口上依次添加多个按钮,那么界面会怎样显示这些按钮?想当然的话,按 ...

  2. Log4J对系统性能的影响

    Log4J对系统性能的影响 主要体现: 1.日志输出的目的地,输出到控制台的速度比输出到文件系统的速度要慢. 2.日志输出格式不一样对性能也会有影响,如简单输出布局(SimpleLayout)比格式化 ...

  3. git及gitflow命令备忘

    全文xxx表示你的分支名 一.git 删除本地分支 git branch -d xxx 删除远程分支 git push origin --delete xxx 查看所有分支 本地分支 git bran ...

  4. k8s部署traefik

    基础知识 同nginx相比,traefik能够自动感知后端容器变化,从而实现自动服务发现.  traefik部署在k8s上分为daemonset和deployment两种方式各有优缺点: daemon ...

  5. BZOJ5104 Fib数列 二次剩余、BSGS

    传送门 发现只有通项公式可以解决考虑通项公式 \(F_n = \frac{1}{\sqrt{5}}((\frac{1+\sqrt{5}}{2})^n - (\frac{1-\sqrt{5}}{2})^ ...

  6. LOJ3120 CTS2019 珍珠 生成函数、二项式反演、NTT

    传送门 题目大意:给出一个长度为\(n\)的序列\(a_i\),序列中每一个数可以取\(1\)到\(D\)中的所有数.问共有多少个序列满足:设\(p_i\)表示第\(i\)个数在序列中出现的次数,\( ...

  7. aspnetcore 容器化部属到阿里云全过程记录

    第一次写博客,作为一个全栈er,记录一下从阿里云到产品运维上线的全过程 一.阿里云上的设置 购买阿里云ECS后: 进控制台查看实例公网IP 在控制台.网络与安全->安全组,配置规则 点击进去可以 ...

  8. jmeter进行压测的步骤

    1)安装jmeter和Badboy. 2)用badboy录制脚本,保存之后直接导出. 3)用jmeter打开badboy录制的脚本,假如是有参数的话,需要写一个csv的参数化文件,在jmeter中添加 ...

  9. 用js写的简单的下拉菜单

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. 恶意代码分析学习之dll相关记录

    kernel32.dll 这是一个很常见的DLL,它包含核心系统功能,如访问和操作内存.文件和硬件,Kernel32.dl等等 Advapi32.dll 这个DLL提供了对核心Windows组件的访问 ...