排序,在编程中经常遇到的算法,我也在几篇文章中介绍了一些关于排序的算法。有的高级语言内置了一些排序函数。本文讲述Python在这方面的工作。供使用

内置函数sorted()/list.sort()的使用

简单应用

python对list有一个内置函数:

>>> a=[5,3,6,1,9,2]

>>>

1

2

3

4

5

6

>>>a=[5,3,6,1,9,2]

>>>sorted(a)#a经过sorted之后,得到一个排序结果

[1,2,3,5,6,9]#但是,原有的a并没有受到影响

>>>a

[5,3,6,1,9,2]

也可以使用list.sort()来进行上述操作。

>>> a.sort()

>>> a #注意这里,经过list.sort()之后,原有

[1, 2, 3, 5, 6, 9] #a的顺序已经发生变化,与上述不同之处。

1

2

3

4

>>>a.sort()

>>>a#注意这里,经过list.sort()之后,原有

[1,2,3,5,6,9]#a的顺序已经发生变化,与上述不同之处。

sorted和list.sort()的区别:list.sort()只能对list类型进行排序。如下:

>>> b_dict={1:'e',3:'m',9:'a',5:'e'}

>>> b_dict.sort()

Traceback (most recent call last):

File "", line 1, in

AttributeError: 'dict' object has no attribute 'sort'

1

2

3

4

5

6

>>>b_dict={1:'e',3:'m',9:'a',5:'e'}

>>>b_dict.sort()

Traceback(mostrecentcalllast):

File"",line1,in

AttributeError:'dict'objecthasnoattribute'sort'

而sorted则不然,看例子:

>>> b_dict

{1: 'e', 3: 'm', 5: 'e', 9: 'a'}

>>> sorted(b_dict)

[1, 3, 5, 9]

1

2

3

4

5

>>>b_dict

{1:'e',3:'m',5:'e',9:'a'}

>>>sorted(b_dict)

[1,3,5,9]

sorted之后,上述对dictinoary中,将key值取出并排序,返回list类型的排序结果。

按照指定关键词排序

在list.sort()和sorted中,都可以根据指定的key值排序。例如:

sorted的例子:

>>> qw="I am Qiwsir you can read my articles im my blog".split()

>>> qw

['I', 'am', 'Qiwsir', 'you', 'can', 'read', 'my', 'articles', 'im', 'my', 'blog']

>>> sorted(qw,key=str.lower) #按照字母升序排列

['am', 'articles', 'blog', 'can', 'I', 'im', 'my', 'my', 'Qiwsir', 'read', 'you']

1

2

3

4

5

6

>>>qw="I am Qiwsir you can read my articles im my blog".split()

>>>qw

['I','am','Qiwsir','you','can','read','my','articles','im','my','blog']

>>>sorted(qw,key=str.lower)#按照字母升序排列

['am','articles','blog','can','I','im','my','my','Qiwsir','read','you']

list.sort()的例子:

>>> qw

['I', 'am', 'Qiwsir', 'you', 'can', 'read', 'my', 'articles', 'im', 'my', 'blog']

>>> qw.sort(key=str.lower)

>>> qw

['am', 'articles', 'blog', 'can', 'I', 'im', 'my', 'my', 'Qiwsir', 'read', 'you']

1

2

3

4

5

6

>>>qw

['I','am','Qiwsir','you','can','read','my','articles','im','my','blog']

>>>qw.sort(key=str.lower)

>>>qw

['am','articles','blog','can','I','im','my','my','Qiwsir','read','you']

此外,key还可以接收函数的单一返回值,按照该值排序。例如:

>>> name_mark_age = [('zhangsan','A',15),('LISI','B',14),('WANGWU','A',16)]

>>> sorted(name_mark_age, key = lambda x: x[2]) #根据年龄排序

[('LISI', 'B', 14), ('zhangsan', 'A', 15), ('WANGWU', 'A', 16)]

>>> sorted(name_mark_age, key = lambda x: x[1]) #根据等级排序

[('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('LISI', 'B', 14)]

>>> sorted(name_mark_age, key = lambda x: x[0]) #根据姓名排序

[('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhangsan', 'A', 15)]

1

2

3

4

5

6

7

8

9

10

>>>name_mark_age=[('zhangsan','A',15),('LISI','B',14),('WANGWU','A',16)]

>>>sorted(name_mark_age,key=lambdax:x[2])#根据年龄排序

[('LISI','B',14),('zhangsan','A',15),('WANGWU','A',16)]

>>>sorted(name_mark_age,key=lambdax:x[1])#根据等级排序

[('zhangsan','A',15),('WANGWU','A',16),('LISI','B',14)]

>>>sorted(name_mark_age,key=lambdax:x[0])#根据姓名排序

[('LISI','B',14),('WANGWU','A',16),('zhangsan','A',15)]

除了上述方式,python中还提供了一个选择循环选择指定元组值的模块

>>> from operator import itemgetter #官方文档:https://docs.python.org/2/library/operator.html#module-operator

>>> name_mark_age.append(('zhaoliu','B',16))

>>> name_mark_age

[('zhangsan', 'A', 15), ('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]

>>> sorted(name_mark_age,key=itemgetter(2)) #按照年龄排序

[('LISI', 'B', 14), ('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]

>>> sorted(name_mark_age,key=itemgetter(1,2)) #先按照等级排序,相同等级看年龄

[('zhangsan', 'A', 15), ('WANGWU', 'A', 16), ('LISI', 'B', 14), ('zhaoliu', 'B', 16)]

1

2

3

4

5

6

7

8

9

10

11

>>>fromoperatorimportitemgetter#官方文档:https://docs.python.org/2/library/operator.html#module-operator

>>>name_mark_age.append(('zhaoliu','B',16))

>>>name_mark_age

[('zhangsan','A',15),('LISI','B',14),('WANGWU','A',16),('zhaoliu','B',16)]

>>>sorted(name_mark_age,key=itemgetter(2))#按照年龄排序

[('LISI','B',14),('zhangsan','A',15),('WANGWU','A',16),('zhaoliu','B',16)]

>>>sorted(name_mark_age,key=itemgetter(1,2))#先按照等级排序,相同等级看年龄

[('zhangsan','A',15),('WANGWU','A',16),('LISI','B',14),('zhaoliu','B',16)]

在官方文档上,有这样一个例子,和上面的操作是完全一样的。

>>> class Student:

def __init__(self, name, grade, age):

self.name = name

self.grade = grade

self.age = age

def __repr__(self):

return repr((self.name, self.grade, self.age))

>>> student_objects = [

Student('john', 'A', 15), #注意这里,用class Student来生成列表内的值

Student('jane', 'B', 12), #因此,可以通过student_objects[i].age来访问某个名称的年龄,i=0,则是john的年龄

Student('dave', 'B', 10),

]

>>> sorted(student_objects, key=lambda student: student.age)

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

>>>classStudent:

def__init__(self,name,grade,age):

self.name=name

self.grade=grade

self.age=age

def__repr__(self):

returnrepr((self.name,self.grade,self.age))

>>>student_objects=[

Student('john','A',15),#注意这里,用class Student来生成列表内的值

Student('jane','B',12),#因此,可以通过student_objects[i].age来访问某个名称的年龄,i=0,则是john的年龄

Student('dave','B',10),

]

>>>sorted(student_objects,key=lambdastudent:student.age)

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

也可以引用operator模块来实现上述排序

>>>from operator import attrgetter

>>> sorted(student_objects, key=attrgetter('age'))

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

>>> sorted(student_objects, key=attrgetter('grade', 'age'))

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

1

2

3

4

5

6

>>>fromoperatorimportattrgetter

>>>sorted(student_objects,key=attrgetter('age'))

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

>>>sorted(student_objects,key=attrgetter('grade','age'))

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

总结:sorted的能力超强,不仅实现排序,还能按照指定关键词排序。

以上例子都是升序,如果,增加reverse=True。例如:

>>>from operator import itemgetter

>>> name_mark_age

[('zhangsan', 'A', 15), ('LISI', 'B', 14), ('WANGWU', 'A', 16), ('zhaoliu', 'B', 16)]

>>> sorted(name_mark_age, key=itemgetter(2),reverse=True)

[('WANGWU', 'A', 16), ('zhaoliu', 'B', 16), ('zhangsan', 'A', 15), ('LISI', 'B', 14)]

1

2

3

4

5

6

>>>fromoperatorimportitemgetter

>>>name_mark_age

[('zhangsan','A',15),('LISI','B',14),('WANGWU','A',16),('zhaoliu','B',16)]

>>>sorted(name_mark_age,key=itemgetter(2),reverse=True)

[('WANGWU','A',16),('zhaoliu','B',16),('zhangsan','A',15),('LISI','B',14)]

python中sorted的用法append_python sorted()排序详解相关推荐

  1. python中append函数解析_对python中的pop函数和append函数详解

    对python中的pop函数和append函数详解 pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list. ...

  2. python中的pop函数和append函数_对python中的pop函数和append函数详解

    pop()函数 1.描述 pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值. 语法 pop()方法语法: list.pop(obj=list[-1]) 2.参数 obj ...

  3. python中的class怎么用_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  4. python中class变量_对python 中class与变量的使用方法详解

    python中的变量定义是很灵活的,很容易搞混淆,特别是对于class的变量的定义,如何定义使用类里的变量是我们维护代码和保证代码稳定性的关键. #!/usr/bin/python #encoding ...

  5. python中if语句的实例_对python中if语句的真假判断实例详解

    说明 在python中,if作为条件语句,当if后面的条件参数为真时,则执行后面的语句块,反之跳过,为了深入理解if语句,我们需要知道if语句的真假判断方式. 示例 在python交互器中,经过测试发 ...

  6. Python中的list/tuple/dict/set数据类型详解

    Python中的list/tuple/dict/set数据类型详解 Python内部内置了一些数据类型与结构,可以方便在编程时候的使用. list List存储一系列的有序集合,并且元素内容可变(可更 ...

  7. Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介、案例应用(python中的编码格式及常见编码问题详解)之详细攻略

    Computer:字符编码(ASCII编码/GBK编码/BASE64编码/UTF-8编码)的简介.案例应用(python中的编码格式及常见编码问题详解)之详细攻略 目录 符串编码(ASCII编码/GB ...

  8. 站长在线Python精讲:在Python中匹配字符串的3个方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中匹配字符串的3个方法详解>.本知识点主要内容有:使用match()方法进行匹配.使用search()方法进行 ...

  9. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

最新文章

  1. Linux文本处理三剑客之awk
  2. 张秋余---经典语录
  3. 信息学奥赛一本通 1855:【09NOIP提高组】潜伏者 | OpenJudge NOI 1.7 11:潜伏者 | 洛谷 P1071 [NOIP2009 提高组] 潜伏者
  4. 以下关于组装微型计算机的叙述 不正确的是,昆明理工大学 计算机系统练习题...
  5. 转(每天淘汰你自己)
  6. php写cms,浅谈thinkPHP,国内写CMS利用率最高的框架
  7. 已知两点坐标求水平距离_过中心的弦---极坐标
  8. 1005 地球人口承载力估计
  9. 解决QQ或TIM下载群文件网路失败或者网速贼慢的办法
  10. php测试宽带速度慢,别被运营商骗了! 手把手教你学会测自家网速
  11. 黑苹果系统的优化与问题解决(一)
  12. ffmpeg批量将图片合并为视频
  13. 2021全国人工智能师资培训正式“开课”,百度飞桨助力高校教师提升AI“超能力”...
  14. javascript-彩票游戏
  15. ABP入门教程(四)初探领域驱动设计
  16. matlab 水利,Matlab在水力仿真计算中的应用.kdh.pdf
  17. 论文笔记:《DeepGBM: A Deep Learning Framework Distilled by GBDT for Online Prediction Tasks》
  18. 特征提取算法--ORB
  19. SpringBoot 项目引入本地jar包,并设置maven打包一并打入
  20. jsonready onload 与_onload事件,onload事件是什么意思

热门文章

  1. 输入框不可以输入中文
  2. mysql htmlspecialchars_htmlSpecialchars和MySQL_REARY_EXECH_String是否保证PHP代码
  3. CVE-2017-15715漏洞复现
  4. java 内存数据库 sql_ssm+redis +Maven用于内存数据库 (No Sql)入门demo
  5. java mvc 案例_springmvc经典案例
  6. python提取数据段_python提取数据段 python数据分析
  7. elementUI之switch应用的坑
  8. npm dev run 报错
  9. react-native页面间传递数据的几种方式
  10. 可视化分析js的内存分配与回收