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=0for i in str(x):result+=int(i)return resultnum=[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]

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

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

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

相关文章

微信小程序 django+nodejs电影院票务售票选座系统324kd

小程序Android端运行软件 微信开发者工具/hbuiderx uni-app框架:使用Vue.js开发跨平台应用的前端框架,编写一套代码,可编译到Android、小程序等平台。 前端:HTML5,CSS3 VUE 后端:java(springbootssm)/python(flaskdja…

Django框架的基础知识

Django(英文发音:dʒŋgəʊ)是一个开放源代码的Web应用框架,使用高性能的Python语言编写而成。Django框架的诞生,最初是用来开发和管理Lawrence Publishing Group(劳伦斯出版集团)旗下的新闻网…

【Mysql高可用集群-双主双活-myql+keeplived】

Mysql高可用集群-双主双活-myqlkeeplived 一、介绍二、准备工作1.两台centos7 linux服务器2.mysql安装包3.keepalived安装包 三、安装mysql1.在128、129两台服务器根据《linux安装mysql服务-两种安装方式教程》按方式一安装好mysql应用。2.修改128服务器/etc/my.cnf配置文件&am…

(非技术) 基因遗传相关知识学习笔记

目录 一、基因遗传名词解释 二、什么叫显性遗传和隐性遗传? 三、如何确定遗传性质呢?是显性还是隐性? 四、常规例子1: 五、常规例子2: 六、实际案例: 七、思考题: 八、参考: …

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测

分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测 目录 分类预测 | Matlab实现KPCA-ISSA-LSSVM基于核主成分分析和改进麻雀优化算法优化最小二乘支持向量机分类预测分类效果基本描述程序设计参考资料 分类效果 基本描述…

Python+Django+Html网页版人脸识别考勤打卡系统

程序示例精选 PythonDjangoHtml人脸识别考勤打卡系统 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《PythonDjangoHtml网页版人脸识别考勤打卡系统》编写代码,代码整洁&#xf…

微信小程序真机无法下载文件

问题: 1、真机无法展示加了防盗链的图片 2、真机无法下载pdf等文件 文件服务器供应商:腾讯 解决: 1、在文件服务器控制台加上微信小程序的域名白名单:servicewechat.com 具体可查看:对象存储 设置防盗链-控制台指…

Canal 同步mysql 到es 日期格式报错解决

第一步:下载源码alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件 (github.com) 第二步:编辑源码(client-adapter下面的clinet-adapter.escore): com.alibaba.otter.canal.client.adapter.es.core.support.ESSyncUt…

自然语言控制机械臂:ChatGPT与机器人技术的融合创新(上)

引言: 自OpenAI发布ChatGPT以来,世界正迅速朝着更广泛地将AI技术融合到机器人设备中的趋势发展。机械手臂,作为自动化与智能化技术的重要组成部分,在制造业、医疗、服务业等领域的应用日益广泛。随着AI技术的进步,机械…

Quartz + SpringBoot 实现分布式定时任务

文章目录 前言一、分布式定时任务解决方案二、Quartz是什么?1.quartz简介2.quartz的优缺点 二、Quartz分布式部署总结 前言 因为应用升级,由之前的单节点微服务应用升级为集群微服务应用,所以之前的定时任务Spring Scheduled不再适用了&…

vue3第十八节(diff算法)

引言: 上一节说了key的用途,而这个key属性,在vue的vnode 中至关重要,直接影响了虚拟DOM的更新机制; 什么场景中会用到diff算法 如:修改响应式属性需要重新渲染页面,会重新执行render渲染函数返…

【OpenVINO™】使用 OpenVINO™ C# API 部署 YOLOv9 目标检测和实例分割模型(上篇)

YOLOv9模型是YOLO系列实时目标检测算法中的最新版本,代表着该系列在准确性、速度和效率方面的又一次重大飞跃。它通过引入先进的深度学习技术和创新的架构设计,如通用ELAN(GELAN)和可编程梯度信息(PGI)&…