对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,xin enumerate(L)]#i can confirm the stable sort

>>>A.sort()

>>>L= [s[2]for sin 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是的比较从左到右比较的,比较完第一个,如果相等,比较第二个

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持服务器之家!

原文链接:http://blog.chinaunix.net/uid-20775448-id-4222915.html

python列表排序方法-python list排序的两种方法及实例讲解相关推荐

  1. python去重复排序_Python实现删除排序数组中重复项的两种方法示例

    本文实例讲述了Python实现删除排序数组中重复项的两种方法.分享给大家供大家参考,具体如下: 对于给定的有序数组nums,移除数组中存在的重复数字,确保每个数字只出现一次并返回新数组的长度 注意:不 ...

  2. Python计算程序运行时间秒级/毫秒级的两种方法datetime和time

    Python计算程序运行时间秒级/毫秒级的两种方法datetime和time 简单粗暴,先上代码: import datetime import time# 方法一:datetime.datetime ...

  3. 第四周作业——统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现)

    统计/etc/init.d/functions文件中每个单词的出现次数,并排序(用grep和sed两种方法分别实现) 方法一:grep实现 grep -o "\<[[:alpha:]] ...

  4. dede列表页if判断输出html,首页、列表页调用文章body内容的两种方法

    随着源码的开放性,很多SEOER对页面的要求也越来越复杂多样性,很多时候,织梦系统的原有功能并不能满足seoer的页面布置要求,这就需要继续开发页面,做更多的功能调用. 今天徐金华SEO给大家讲的是关 ...

  5. 织梦首页、列表页调用文章body内容的两种方法

    关于首页.列表页调用文章body内容的两种方法,具体方法如下: 第一种方法: {dede:arclist row='1' typeid='1' addfields='body' idlist='1' ...

  6. python字符串成熟编码_python字符串转公式两种方法获取网页编码python版

    在web开发的时候我们经常会遇到网页抓取和分析,各种语言都可以完成这个功能.我喜欢用python实现,因为python提供了很多成熟的模块,可以很方便的实现网页抓取. 但是在抓取过程中会遇到编码的问题 ...

  7. python安装gdal包_python安装gdal的两种方法

    1.不用手动下载文件,直接执行以下命令即可 conda install gdal 2.首先,下载gdal的whl文件  链接, 官网下载比较慢,GDAL-2.2.4-cp27-cp27m-win_am ...

  8. python向上取整的方法_python 取整的两种方法,python向上取整的方法,问题简介:  要把一...

    python 取整的两种方法,python向上取整的方法,问题简介: 要把一 问题简介: 要把一个浮点数(float)整数部分提取出来.比如把"2.1"变成"2" ...

  9. python stdout_详解使用python的logging模块在stdout输出的两种方法

    详解使用python的logging模块在stdout输出 前言: 使用python的logging模块时,除了想将日志记录在文件中外,还希望在前台执行python脚本时,可以将日志直接输出到标准输出 ...

  10. python删除空文件和文件夹_python 两种方法删除空文件夹

    第一种方法: import os def delete_gap_dir(dir): if os.path.isdir(dir): for d in os.listdir(dir): #print(&q ...

最新文章

  1. 漫画:设计模式之 “外观模式”
  2. php 服务器运行状态,检查服务器各种服务的运行状态
  3. Android-源代码分析
  4. 网易考拉没有了,网易严选还会远吗?
  5. 游戏型计算机的配置表,爽玩游戏型详细配置列表及推荐理由
  6. 使用dotnet template快速开发Microsoft Teams Outgoing Web Hook
  7. 计算机网络技术之城域网与三网融合技术
  8. 定义水果和方法的java代码_命名水果的两列上的自定义聚合
  9. JAVA多线程--线程阻塞与唤醒
  10. [导入]MsAjax Lib- Date.format 函数
  11. pytorch学习笔记(三十):RNN反向传播计算图公式推导
  12. Sublime配置java运行环境
  13. luogu1850 [NOIp2016]换教室 (floyd+dp)
  14. Delphi LiveBinds组件
  15. python3编译器不同版本差别大吗_python3.9的转义符使用和其他版本不一样吗?
  16. RFID将成为物联网革命的首战
  17. layoutIfNeeded 就这样把我害惨
  18. Atitit 业务流程执行引擎的实现 目录 1.1. 引擎实现语言java js php等 1 1.2. 流程语言 xml sql js等 业务流程定义语言规范总结 1 1.3. 实体方法定义 2
  19. 粒子群算法的惩罚函数的c语言实现,粒子群算法结合惩罚函数用于桥式起重机主梁优化.pdf...
  20. 如何在2015年后的MacBook Air上安装双系统

热门文章

  1. BZOJ 1232 USACO 2008 Nov. 安慰奶牛Cheer
  2. artdialog4.1.7 中父页面给子页面传值
  3. 为什么有时候NSData转换成NSString的时候返回nil
  4. JTA(java telnet/ssh client)不能telnet/ssh远程机器问题与解决
  5. (转)淘淘商城系列——SSM框架整合之逆向工程
  6. Html body的滚动条禁止与启用
  7. Android 渗透测试学习手册 第八章 ARM 利用
  8. 基于Eureka的服务治理
  9. 微信小程序用户数据解密
  10. spring aop实现日志收集