python list排序的两种方法及实例讲解
对List进行排序,Python提供了两个方法方法1 用List的内建函数list sort进行排序list sort(func=None, key=None, reverse=False)Python实
对List进行排序,Python提供了两个方法
方法1.用List的内建函数list.sort进行排序
list.sort(func=None, key=None, reverse=False)
Python实例:
1
2
3
4
5
6
|
>>> list = [ 2 , 5 , 8 , 9 , 3 ] >>> list [ 2 , 5 , 8 , 9 , 3 ] >>> list .sort() >>> list [ 2 , 3 , 5 , 8 , 9 ] |
方法2.用序列类型函数sorted(list)进行排序(从2.4开始)
Python实例:
1
2
3
4
5
|
>>> list = [ 2 , 5 , 8 , 9 , 3 ] >>> list [ 2 , 5 , 8 , 9 , 3 ] >>> sorted ( list ) [ 2 , 3 , 5 , 8 , 9 ] |
两种方法的区别:
sorted(list)返回一个对象,可以用作表达式。原来的list不变,生成一个新的排好序的list对象。
list.sort() 不会返回对象,改变原有的list。
其他sort的实例:
实例1:正向排序
1
2
3
4
|
>>>L = [ 2 , 3 , 1 , 4 ] >>>L.sort() >>>L >>>[ 1 , 2 , 3 , 4 ] |
实例2:反向排序
1
2
3
4
|
>>>L = [ 2 , 3 , 1 , 4 ] >>>L.sort(reverse = True ) >>>L >>>[ 4 , 3 , 2 , 1 ] |
实例3:对第二个关键字排序
1
2
3
4
|
>>>L = [( 'b' , 6 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )] >>>L.sort( lambda x,y: cmp (x[ 1 ],y[ 1 ])) >>>L >>>[( 'a' , 1 ), ( 'c' , 3 ), ( 'd' , 4 ), ( 'b' , 6 )] |
实例4: 对第二个关键字排序
1
2
3
4
|
>>>L = [( 'b' , 6 ),( 'a' , 1 ),( 'c' , 3 ),( 'd' , 4 )] >>>L.sort(key = lambda x:x[ 1 ]) >>>L >>>[( 'a' , 1 ), ( 'c' , 3 ), ( 'd' , 4 ), ( 'b' , 6 )] |
实例5: 对第二个关键字排序
1
2
3
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)
1
2
3
4
5
6
|
>>>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:
1
2
3
4
|
>>>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:
1
2
3
4
|
>>> 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:
1
2
3
4
|
>>> 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 list排序的两种方法及实例讲解的更多相关文章
- 转:python list排序的两种方法及实例讲解
对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...
- 用Java集合中的Collections.sort方法对list排序的两种方法
用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
- 用Python计算幂的两种方法,非递归和递归法
用Python计算幂的两种方法: #coding:utf-8 #计算幂的两种方法.py #1.常规方法利用函数 #不使用递归计算幂的方法 """ def power(x, ...
- 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)
实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序. //对数组$ ...
- Python修改文件的两种方法
目录: 一.以占用内存的方式修改文件 二.以占用硬盘的方式修改文件 引言 文件修改的方法从操作方式上大致可以分为两类,一种是以占用电脑内存的方式,将文件读取到内存中修改再存回硬盘:第二种方法是分别打开 ...
- python-快速排序,两种方法→易理解
快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...
- python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 import MySQ ...
- 【Python】python更新数据库脚本两种方法
最近项目的两次版本迭代中,根据业务需求的变化,需要对数据库进行更新,两次分别使用了不同的方式进行更新. 第一种:使用python的MySQLdb模块利用原生的sql语句进行更新 1 import ...
- 使用Python生成源文件的两种方法
利用Python的字符串处理模块,开发者能够编写脚本用来生成那些格式同样的C.C++.JAVA源程序.头文件和測试文件,从而避免大量的反复工作. 本文概述两种利用Python string类生成jav ...
随机推荐
- xml有哪些解析技术?区别是什么?
xml有哪些解析技术?区别是什么? Answer: 有DOM,SAX,STAX等 (1):DOM:处理大型文件时其性能下降的非常厉害.这个问题是由DOM的树结构所造成的,这种结构占用的内存较多,而且D ...
- spring data jpa Specification 例子
/** * 封装查询条件 * * @param baseQueryDTO * @return */ private Specification<ActivityBase> getSpeci ...
- SGU 175.Encoding
Solution: 简单题. 答案初始化为1. 从给定的n,q往下推出新的n和q,如果q是在右半边,答案加上 n-n/2. 一直到推到n==1. code: #include <iostream ...
- WIN10 搜索功能无法搜索本地应用
原因是使用360卫士此类软件把windows search 服务给禁掉了. 解决方案很简单,就是把windows search 服务重新设置成自启动,并立刻启动,就ok了. 至于如何打开服务组件,可以 ...
- Device.js——检测设备平台、操作系统的Javascript 库
http://segmentfault.com/a/1190000000373735 Device.js 是一个可以让你检测设备的平台,操作系统和方向 JavaScript 库,它会自动在 <h ...
- du和df不一致的解决方法
df:disk free,统计的是当前系统中空闲的磁盘du:disk usage,统计的是正在使用的空闲的磁盘.如果一个文件被删除之后,使用这个文件的进程未重启,则会出现df和du不一致的情况. 解决 ...
- Java中接口与实例化
一.问题引入 前两天学代理模式的时候想到的,接口可不可以new呢? 接口是特殊的抽象类,接口的方法都默认为 public abstract 的... 抽象的方法不 ...
- Webpack 傻瓜式指南(一)
modules with dependencies webpack module bundler static assetss .js .js .png Webpack傻瓜式指南 n ...
- ARM单片机的头文件如何用结构体定义地址
下面我们以ARM Cortex-M0内核单片机LPC1114的头文件lpc11xx.h文件进行说明. 1.先说两句 lpc11xx.h文件是lpc11xx系列单片机包含的头文件.这个文件的作用和51单 ...
- 追踪CM_CONTROLCHANGE消息的产生和执行过程,可以较好的领会VCL的思想(就是到处通知,但耦合性很弱)
追踪CM_CONTROLCHANGE消息的流向,可以较好的 测试代码: procedure TForm1.Button1Click(Sender: TObject);var Image2 : TIma ...