c++ 多个字符串排序_Python小白干货宝典:sorted()函数:列表元素排序

定义:

sorted() 函数对所有可迭代的对象进行排序操作。

内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

de6ab41e1da5fc2ecaa9fb3e66bc04da.png

语法:

sorted 语法:

sorted(iterable, cmp=None, key=None, reverse=False)

返回值:返回重新排序的列表。

参数说明:

  • iterable -- 可迭代对象
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。无论是 sort() 还是 sorted() 函数,传入参数 key 比传入参数 cmp 效率要高。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

cmp()函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1

语法:

cmp( x, y )

参数:

  • x -- 数值表达式。
  • y -- 数值表达式。

reverse()函数:用于反向列表中元素。

语法:

list.reverse()

该方法没有返回值,但是会对列表的元素进行反向排序。

sorted 的使用方法:

1、默认情况下,sorted 函数将按列表升序进行排序,并返回一个新列表对象,原列表保持不变,最简单的排序。

nums = [3,4,5,2,1]>>> sorted(nums)[1, 2, 3, 4, 5]

2、降序排序,如果要按照降序排列,只需指定参数 reverse=True 即可

sorted(nums, reverse=True)[5, 4, 3, 2, 1]

3、如果要按照某个规则排序,则需指定参数key, key 是一个函数对象,例如字符串构成的列表,我想按照字符串的长度来排序

chars = ['Andrew', 'This', 'a', 'from', 'is', 'string', 'test']>>> sorted(chars, key=len)['a', 'is', 'from', 'test', 'This', 'Andrew', 'string']

len是内建函数,sorted 函数在排序的时候会用len去获取每个字符串的长度来排序。 有些人可能使用匿名函数 key=lambda x: len(x) ,

4、如果是一个复合的列表结构,例如由元组构成的列表,要按照元组中的第二个元素排序,那么可以用 lambda 定义一个匿名函数。

students = [('zhang', 'A'), ('li', 'D'), ('wang', 'C')]>>> sorted(students, key=lambda x: x[1])[('zhang', 'A'), ('wang', 'C'), ('li', 'D')]

这里将按照字母 A-C-D 的顺序排列。

如果要排序的元素是自定义类,例如Student类按照年龄来排序,则可以写成

a = [5,7,6,3,4,1,2]>>> b = sorted(a) # 保留原列表>>> a [5, 7, 6, 3, 4, 1, 2]>>> b[1, 2, 3, 4, 5, 6, 7] >>> L=[('b',2),('a',1),('c',3),('d',4)]>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数[('a', 1), ('b', 2), ('c', 3), ('d', 4)]>>> sorted(L, key=lambda x:x[1]) # 利用key[('a', 1), ('b', 2), ('c', 3), ('d', 4)] >>> students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>> sorted(students, key=lambda s: s[2]) # 按年龄排序[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)] >>> sorted(students, key=lambda s: s[2], reverse=True) # 按降序[('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]>>>

6、和数据库的排序一样,sorted 也可以根据多个字段来排序,例如我有先要根据age排序,如果age相同的则根据grade排序,则可以使用元组:

sorted(student_objects, key=lambda t:(t.age, t.grade))[('dave', 'B', 10), ('lily', 'A', 12), ('jane', 'B', 12), ('john', 'A', 15)]

7、同样的,对于自定义类,也有一种更高效的方法指定key

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)]

8、前面碰到的排序场景都是建立在两个元素是可以互相比较的前提下,例如数值按大小比较, 字母按顺序比较。

如果遇到本身是不可比较的,需要我们自己来定义比较规则的情况如何处理呢?

nums = [2, 1.5, 2.5, '2', '2.5']>>> sorted(nums)TypeError: '<' not supported between instances of 'str' and 'int'

一个整数列表中,可能有数字,字符串,在Python3中,字符串与数值是不能比较的,而Python2中任何类型都可以比较,这是两个版本中一个很大的区别:

python2>>> "2.5" > 2True# python3>>> "2.5" > 2TypeError: '>' not supported between instances of 'str' and 'int'

9、关于 sorted 函数,当遇到需要自定义比较操作的数据,Python2和Python3之间的区别是:

Python2中的sorted 可以指定cmp关键字参数,可以通过 cmp=compare 来实现,

Python3中还需要导入functools.cmp_to_key实现

sorted()函数使用范围:

  • 对字典进行排序(中根据字典的值进行排序)
  • 多维list排序
  • 字典中混合list排序
  • List 中混合字典排序
  • 对字符串进行排序

sort()与sorted()的区别

1、相比于 sort(),sorted() 使用的范围更为广泛,两者的函数形式分别如下:

sorted(iterable[, cmp[, key[, reverse]]]) s.sort([cmp[, key[, reverse]]])

2、sorted() 作用于任意可迭代的对象,而 sort()一般作用于列表。

a = (1,2,4,2,3)>>> a.sort()Traceback (most recent call last): File "<stdin>", line 1, in <module>AttributeError: 'tuple' object has no attribute 'sort'>>> sorted(a)[1, 2, 2, 3, 4]

下面的例子中针对元组使用 sort() 方法会抛出 AttributeError,而使用 sorted() 函数则 没有这个问题。

3、当排序对象为列表的时候两者适合的场景不同。sorted() 函数会返回一个排序后的列表,原有列表保持不变;而 sort() 函数会直接修改原有列表,永久改变,无法返回,函数返回为 None。

a=['1',1,'a',3,7,'n']>>> sorted(a)[1, 3, 7, '1', 'a', 'n']>>> a['1', 1, 'a', 3, 7, 'n']>>> print a.sort()None>>> a[1, 3, 7, '1', 'a', 'n']

如果实际应用过程中需要保留原有列表,使用 sorted() 函数较为适合,否则可以选择sort() 函数,因为 sort() 函数不需要复制原有列表,消耗的内存较少,效率也较高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/344010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【渝粤教育】电大中专液压与气动技术_1作业 题库

1.液压泵吸油口的真空度由三部分组成&#xff1a;①把油液提升到一定高度所需的压力。产生一定的流速所需的压力。吸油管内压力损失。该说法&#xff08;&#xff09; A.正确 B.错误 正确 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.在液压系统的管路中&#xff0c…

工业级以太网交换机的使用情况分析

工业级以太网交换机是专门为满足灵活多变的工业应用需求而设计&#xff0c;提供一种高性价比工业以太网通讯解决方案。工业以太网交换机&#xff0c;作为我们广为使用的局域网硬件设备&#xff0c;一直为大家所熟悉。它的普及程度其实是由于以太网的广泛使用&#xff0c;作为今…

【渝粤教育】电大中专电子商务网站建设与维护 (16)作业 题库

1.阿里巴巴信息服务栏目主要包括以下内容&#xff1a;商业机会、产品展示、公司全库、行业资讯、价格行情、以商会友、商业服务。 &#xff08; &#xff09; A.错误 B.正确 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;未作答 2.阿里巴巴的运营模式&#xff0c;概…

工业级以太网交换机产品特征及应用案例介绍

工业以太网交换机&#xff08;简称工业交换机&#xff09;是专门为满足灵活多变的工业应用需求而提供的一种高性价比的组网设备。针对工业控制的实际需求&#xff0c;工业交换机解决了通信实时性、网络可用性能和安全性等技术问题。与普通商业交换机相比&#xff0c;工业交换机…

【渝粤教育】电大中专药事管理与法规_1作业 题库

1.根据《执业药师职业资格制度规定》&#xff0c;执业药师职业资格考试中提出考试合格标准建议的部门是&#xff08;&#xff09;。 A.国家药品监督管理局 B.国家人力资源社会保障部 C.国家卫生健康委员会 D.国家医疗保障局 正确 正确答案&#xff1a;左边查询 学生答案&#x…

mysql 热块_MySQL分布式集群之MyCAT(三)rule的分析【转】

首先写在最前面&#xff0c;MyCAT1.4的alpha版本已经发布了&#xff0c;这里面修复了不少的bug&#xff0c;也完善了一细节&#xff0c;之前两篇博客已经做了一些修改---------------------------------------------------------------------------------这才是本体~----------…

glassfish发布应用_WildFly 8与GlassFish 4 –选择哪个应用服务器

glassfish发布应用自从我上一个博客以来已经有一段时间了。 我显然忙于其他事情&#xff0c;包括我的主要工作。 在对应用服务器的正确选择提出更多疑问之后&#xff0c;是时候再次讨论这个话题并分享我的想法。 该博客上最常阅读的文章之一是有关选择哪种Java EE 6应用程序服…

【渝粤教育】电大中专计算机职业素养 (5)作业 题库

1.曾经的一项调查发现一些企业业绩不好&#xff0c;客户流失的最重要的原因是&#xff08; &#xff09;。 A.企业管理问题 B.企业员工素养达不到要求 C.企业产品价格不好 D.企业产品质量问题 错误 正确答案&#xff1a;左边查询 学生答案&#xff1a;A 2.&#xff08; &#x…

【渝粤教育】电大中专跨境电子商务理论与实务答案作业 题库

1.在按照服务类型中&#xff0c;&#xff08; &#xff09;服务平台主要是为境内外会员商户提供网络营销平台&#xff0c;传递供应商或采购商等商家的商品或服务信息&#xff0c;促成双方完成交易。 A.信息服务平台 B.在线交易平台 C.线上服务平台 D.线下交易平台 正确 正确答案…

工业交换机的四种安装方式图解

工业交换机的作用可以说是非常强大的&#xff0c;其应用十分广泛&#xff0c;在电力、轨道交通、市政、煤矿安全、工厂自动化、水处理系统、城市安防等都有它的身影&#xff0c;为现代生活智能化的发展提供了非常大的助力。但是由于使用环境的原因&#xff0c;在安装工业交换机…

hutool 获取某月最后一天_hutool定时任务

CronUtil通过一个全局的定时任务配置文件&#xff0c;实现统一的定时任务调度。1.1 pom文件cn.hutoolhutool-all4.1.01.2对于Maven项目&#xff0c;首先在src/main/resources/下创建config包&#xff0c;在包中放入cron.setting文件(默认是这个路径的这个文件)&#xff0c;然后…

亚马逊Corretto 8

更新&#xff01; 我已将在Docker中运行Corretto的选项更新为使用Docker Hub中可用的amazoncorretto Docker映像。 Amazon Corretto是OpenJDK的生产就绪发行版&#xff0c;具有长期支持&#xff0c;包括Amazon提供的性能和安全更新。 Amazon提供了适用于Linux&#xff0c;Win…

【渝粤题库】陕西师范大学400013 组织行为学 作业(专升本)

《组织行为学》作业 一、名词解释 1、组织行为学 2、组织文化 3、激励 4、需要 5、沟通 6、过程 7、 动机 8、社会知觉 9、角色 10、凝聚力 二、判断正误&#xff0c;并简述理由 1、管理思想史上对人的因素的重视自泰罗始。 2、社会人理论假设认为&#xff0c;人的行为是为了获…

SDH光端机市场应用及发展趋势介绍

由于SDH技术的众多特性&#xff0c;使其在广域网领域和专用网领域得到了巨大的发展。中国移动、电信、联通、广电等电信运营商都已经大规模建设了基于SDH的骨干光传输网络。利用大容量的SDH环路承载IP业务、ATM业务或直接以租用电路的方式出租给企、事业单位。而一些大型的专用…

rpm mysql 更改目录_rpm形式安装的MySQL服务 并 修改数据文件目录( red hat)_mysql...

rpm方式安装的mysql服务 并 修改数据文件目录( red hat)卸载mysql1、查找以前是否装有mysql命令&#xff1a;rpm -qa|grep -i mysql可以看到mysql的两个包&#xff1a;mysql-*..*.RHEL**mysqlclient*.RHEL**2、删除mysql删除命令&#xff1a;rpm -e --nodeps 包名( rpm -ev mys…

python参数化建模 书_Python 中如何实现参数化测试?

之前&#xff0c;我曾转过一个单元测试框架系列的文章&#xff0c;里面介绍了 unittest、nose/nose2 与 pytest 这三个最受人欢迎的 Python 测试框架。本文想针对测试中一种很常见的测试场景&#xff0c;即参数化测试&#xff0c;继续聊聊关于测试的话题&#xff0c;并尝试将这…

反模式设计_设计模式:模式或反模式,这就是问题

反模式设计我最近遇到了Wiki页面“ Anti-pattern” &#xff0c;其中包含详尽的反模式列表。 其中一些对我来说很明显。 他们中的一些让我想了一下&#xff0c;其他的让我想了更多。 然后&#xff0c;我开始在页面上查找反模式“ singleton”&#xff0c;但找不到。 &#xff0…

光端机的几种物理接口类型

光端机&#xff0c;就是光信号传输的终端设备。光端机现在能传输的业务很多&#xff0c;如&#xff1a;视频&#xff0c;音频&#xff0c;数据&#xff0c;开关量&#xff0c;电话&#xff0c;以太网等。那么&#xff0c;你对光端机的几种物理接口了解吗&#xff0c;是否懂得光…

js中的数据类型分为两大类分别是什么_数据类型有这么重要吗?

一个没有得到重视的知识点, 数据类型 每种语言都有自己的数据类型,下面以javascript为例 类型的分类 js的数据类型可以分为 两大类: 1,值类型 (String,Number,undefined,Boolean,null) 2,引入类型(Object,Function,Array) 个人理解也可以把值类型和引入类型分为简单类型和复杂类…

监控系统几种常见的光端机传输方案拓扑图

近几年随着模拟摄像机被网络摄像机以及高清同轴摄像机取代&#xff0c;在光纤传输层&#xff0c;之前使用量比较大的视频光端机也逐渐被光纤收发器、POE交换机、网络交换机等网络光通信设备取代掉。目前市场上音频、数据、开关量、电话、对讲等信号依然可以通过光端机来进行传输…