Python中sort()函数、sorted()函数的用法深入讲解(具体实例:蓝桥杯数位排序)

前置知识:

可迭代对象的定义:可迭代对象是指可以被迭代或遍历的对象,即可以使用循环结构对其进行逐个访问的对象。

在Python中常见的可迭代对象有:列表(list)、元组(tuple)、字符串(sting)等

注意事项:因为字符串不是可变的可迭代对象,即字符串的元素是不能修改的特性,所以字符串对象不能使用sort()函数进行快速排序。若要对字符串进行sort()函数排序,则需要将字符串转换为列表或其他可变的可迭代对象。

sort()函数和sorted()函数的区别:sort()函数会将排序完成的结果直接返回到原可迭代对象中,所以会改变原来的可迭代对象内容;sorted()的执行结果会作为一个中间量返回,需要在调用sorted()函数的时候,给定一个变量保存sorted()函数的返回结果。

在Python中我们常常需要使用到sort()函数或sorted()函数对可变的可迭代对象进行快速排序。从而提高程序的运行效率。但是在实际开发中我们大部分时间只采用了普通情况,即简单对列表或与元组进行升序/降序排序。 其实往往在实际的开发过程中,我们还需要进行自定义排序,即特殊情况。

1、普通情况:

当程序员在使用sort()函数对可迭代对象进行排序的时候,如果不传入参数,则会将可迭代对象默认按照升序,进行排序,并将排序好的结果返回到原来的可迭代对象中。所以使用sort()函数进行排序后,原来的可迭代对象已经发生了改变。在使用sort()函数如果想要达到升序或降序的效果,可以通过sort()函数中reverse参数进行调整。当reverse=True时,则将原可迭代对象进行逆序排序;当reverse=False时,则将原可迭代对象进行升序排序。

具体的演示如下:

num=[12,3,56,9] 
num.sort() #默认是正序输出 print(num)

print("=====================")
temp=sorted(num,reverse=True) #将num逆序输出
print("使用sorted函数不会改变原来可迭代对象的内容:",num) 
print("使用sorted函数使用一个中间变量temp保存排序后的结果:",temp)

运行结果:

2.特殊情况:

在使用sort函数时,我们可以利用key参数,传入一个函数名称,实现将列表中的每一个元素传入到key指定的函数,进行某种变化后,在进行升序/降序排序。

具体演示如下:

蓝桥杯2022年第十三届省赛真题-数位排序

时间限制: 3s 内存限制: 576MB 提交: 7243 解决: 2513

题目描述

小蓝对一个数的数位之和很感兴趣,今天他要按照数位之和给数排序。当两个数各个数位之和不同时,将数位和较小的排在前面,当数位之和相等时,将数值小的排在前面。

例如,2022 排在 409 前面,因为 2022 的数位之和是 6,小于 409 的数位之和 13。

又如,6 排在 2022 前面,因为它们的数位之和相同,而 6 小于 2022。

给定正整数 n,m,请问对 1 到 n 采用这种方法排序时,排在第 m 个的元素是多少?

输入格式

输入第一行包含一个正整数 n。

第二行包含一个正整数 m。

输出格式

输出一行包含一个整数,表示答案。

样例输入

复制

13
5

样例输出

复制

3

提示

1 到 13 的排序为:1, 10, 2, 11, 3, 12, 4, 13, 5, 6, 7, 8, 9。第 5 个数为 3。

对于 30% 的评测用例,1 ≤ m ≤ n ≤ 300。

对于 50% 的评测用例,1 ≤ m ≤ n ≤ 1000。

对于所有评测用例,1 ≤ m ≤ n ≤ 106。

实现代码:

n=int(input())

m=int(input())

def sum_num(x):

        result=0

         for i in str(x):

                result+=int(i)

         return result

num=[i for i in range(1,n+1)]

num.sort(key=sum_num) #将数的各个位数,相加后的结果作为字典值进行保存

print(num[m-1])

通过截图:

代码解释:首先定义一个名为sum_num的函数,然后将该函数通过利用key参数传入sort()函数中,此时列表中发生的变化是:将元素转换为字符串后,将对应的数字进行相加,然后将计算结果替换这个列表元素中的内容。可以发现此时sort函数中只有key参数,没有其他参数。则此时默认将列表num中元素进行升序排序。

具体的实现过程:

当num的内容为:[12,23,1,5]

那么使用key参数将sum_num函数传入sort()函数后,会将列表num中的所有列表元素,传入sum_num函数进行计算,计算得到的结果为:[3,5,1,5]。然后sort()函数将依据这个计算结果对num进行排序。则排序完成后的num列表内容为:[1,12,5,23]

刚刚分析过程对应的运行截图:

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

[CTF]使用浏览器firefox插件伪装IP地址

来源:https://jingyan.baidu.com/article/ab0b56306d9890c15bfa7d6a.html 浏览器想必是大家再熟悉不过的东东了,我们会经常使用它访问下载一些页面或文件。但是对于它的更深层次的功能可能就陌生了。比如说一些网站后台会记录我们的IP地址,假…

【AI面试】FPN、PANet、SPP、ASPP、Adaptive feature pooling

经常可以看到各个论文发出来,加入的各种trick。这些改进点,一般都是在前人的基础上,进行了一些修改。比如FPN到PANet的改进,就是为了改进前者存在的一些问题。 这里就把这些trick,给汇集到一起,看看他们的发展历史,看看他们之间有什么区别,又是在哪些地方做的改进。这…

OpenHarmony 3.2 Release版本Codec HDI适配过程

简介 OpenHarmony Codec HDI(Hardware Device Interface)驱动框架基于 OpenMax 实现了视屏硬件编解码驱动,提供 Codec 基础能力接口供上层媒体服务调用,包括获取组件编解码能力、创建组件、参数设置、数据的轮转和控制、以及销毁…

uniapp h5项目实现多选按钮/多选标签/多选框

需求&#xff1a;实现简单多选功能&#xff0c;遍历数据&#xff0c;添加样式 1.效果图 2.以下代码粘贴到代码中&#xff0c;可直接运行&#xff0c;html代码 <view class"page index"><view class"list-box"><view v-for"(item,in…

智能网络新纪元:机器学习赋能未来计算机网络高速发展

&#x1f9d1; 作者简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟,欢迎关注。提供嵌入式方向的学习指导…

赋能技术 助锂制造|青软青之助力锂电检测行业数字化升级

在全球范围内&#xff0c;新能源转型已成为时代的必然选择。随着“双碳”目标的深入推进&#xff0c;这一趋势愈发明显。而作为新能源领域的一颗璀璨明珠&#xff0c;锂电池的研发、产业链建设和技术创新&#xff0c;无疑是这场能源革命的核心所在。其产业链的日趋完善、技术的…

企业培训系统私有化解决方案:PlayEdu

PlayEdu&#xff1a;打造私有化的企业智慧教育平台&#xff0c;赋能全员高效成长&#xff01;- 精选真开源&#xff0c;释放新价值。 概览 随着企业不断发展及市场竞争加剧&#xff0c;内部培训的重要性日益凸显。然而&#xff0c;在实施过程中&#xff0c;如何确保培训内容与…

2024个人动态线条导航HTML源码

源码介绍 2024个人导航HTML源码&#xff0c;源码由HTMLCSSJS组成&#xff0c;记事本打开源码文件可以进行内容文字之类的修改&#xff0c;双击html文件可以本地运行效果&#xff0c;也可以上传到服务器里面&#xff0c;重定向这个界面 源码下载 2024个人导航HTML源码

进军俄罗斯市场,一站式Yandex广告开户与代运营服务

俄罗斯作为欧洲最大的经济体之一&#xff0c;拥有庞大的消费者群体和独特的市场环境&#xff0c;成为了众多国际商家关注的焦点。要有效地触达这片潜力无限的市场&#xff0c;精准且高效的网络营销策略至关重要。利用Yandex——俄罗斯最大的搜索引擎与数字广告平台&#xff0c;…

计算机网络-浏览器解析到URL对应的IP地址的时间

声明&#xff1a;原文转载链接出自&#xff1a; 哈工大Mooc——计算机网络&#xff1a;作业3 假设你在浏览某网页时点击了一个超链接&#xff0c;URL为“https://www.kicker.com.cn/index.html”&#xff0c;且该URL对应的IP地址在你的计算机上没有缓存&#xff1b;文件index…

路由器如何端口映射到外网?

随着互联网的发展和普及&#xff0c;远程访问已经成为了现代社会的一个重要需求。在复杂的网络环境下&#xff0c;特别是涉及异地组网的情况下&#xff0c;实现远程访问变得更加困难。本文将介绍一种名为【天联】的组网产品&#xff0c;它可以解决复杂网络环境下的远程连接问题…

最优算法100例之41-用两个栈实现队列

专栏主页:计算机专业基础知识总结(适用于期末复习考研刷题求职面试)系列文章https://blog.csdn.net/seeker1994/category_12585732.html 题目描述 用两个栈实现队列 题解报告 stack<int> stack1; stack<int> stack2; void push(int node) {stack1.push(node);…

极狐GitLab对接OAuth2实现SSO

本文作者&#xff1a;极狐(GitLab) 高级解决方案架构师 武让 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 企…

windows停掉jenkins服务

在Windows系统中&#xff0c;如果你需要停止Jenkins服务&#xff0c; 使用服务管理器&#xff08;Service Manager&#xff09;: 打开“运行”对话框&#xff08;Win R&#xff09;&#xff0c;输入services.msc&#xff0c;然后回车。 在服务列表中找到“Jenkins”服务&am…

网工基础协议——IP地址

IP地址的概念&#xff1a; IP 地址是我们进行TCP/IP通讯的基础&#xff0c;每个连接到网络上的计算机都必须有一个!P地址。我们目前使用的IP地址是32位的&#xff0c;通常以点分十进制表示。例如:192.168.0.181。IP地址的格式为: IP地址 网络地址 主机地址 或者 |P地址主机地…

【Docker】docker快速安装部署fastdfs的镜像详细记录

部署nacos的docker镜像 第一步&#xff1a; 获取fastdfs镜像1、查看镜像列表2、创建本地映射文件夹 第二步&#xff1a;运行镜像1.使用docker镜像构建tracker服务2.使用docker镜像构建Storage服务3.Storage服务中默认安装了Nginx服务4.如果需要修改storage则配置则进到以下目录…

新手入门:大语言模型训练指南

在这个信息爆炸的时代&#xff0c;人工智能技术正以前所未有的速度渗透到我们生活的方方面面。从智能手机上的语音助手到自动驾驶汽车&#xff0c;AI的应用无处不在。而在这些令人惊叹的技术背后&#xff0c;大语言模型&#xff08;LLM&#xff09;扮演着至关重要的角色。它们不…

从 SQLite 3.4.2 迁移到 3.5.0(二十)

返回&#xff1a;SQLite—系列文章目录 上一篇:SQLite---调试提示&#xff08;十九&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 ​ SQLite 版本 3.5.0 &#xff08;2007-09-04&#xff09; 引入了一个新的操作系统接口层&#xff0c; 与所有先前版本的 SQLi…

游戏测试审表流程

备注:本文为博主原创文章,未经博主允许禁止转载。如有问题,欢迎指正。 个人笔记(整理不易,有帮助,收藏+点赞+评论,爱你们!!!你的支持是我写作的动力) 笔记目录:笔记本~笔记目录_airtest和selenium那个好用-CSDN博客 个人随笔:工作总结随笔_8、以前工作中都接触过哪…

【MATLAB 预测算法教程】_1粒子群算法优化BP神经网络预测 - 教程和对应MATLAB代码

本文以MATLAB自带的脂肪数据集为例,将数据保存在EXCEL工作簿内,方便替换数据使用,以下介绍粒子群算法优化BP神经网络预测的MATLAB代码编写,主要流程包括1. 读取数据 2.划分训练集和测试集 3.归一化 4.确定BP神经网络的隐含层最优节点数量 5. 使用粒子群算法优化BP的神经网络…