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

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

相关推荐
微小冷9 小时前
Python CasADi初步教程
python·控制·模型预测·casadi·符号表达式·sx
cpolar技术支持9 小时前
requirements.txt 能安装不等于安全:用 pip-audit 检查 Python 依赖,cpolar 临时分享脱敏报告
python·cpolar·requirements·依赖安全·pip-audit
测试199810 小时前
Jmeter接口自动化生成测试报告html格式详解
自动化测试·python·测试工具·jmeter·职场和发展·测试用例·接口测试
pjj1985410 小时前
Hadoop-python中使用大数据
大数据·hadoop·python
小刘在重生~10 小时前
Django|Excel 批量上传、Form/ModelForm 文件上传、Media 媒体文件配置
python·django·excel
威联通安全存储10 小时前
TS-h1887XU-RP 在模具制造行业试模与改模数据场景的部署
python·制造
步行cgn10 小时前
Spring Environment 详解:Spring Boot 配置管理的核心接口
spring boot·python·spring
Csvn10 小时前
🐍 Day 12: 编码与字符集 — 告别乱码噩梦
后端·python
2601_9622838810 小时前
Python 开发框架:Django、Flask和FastAPI
python·django·flask·fastapi·web开发
lzfshub10 小时前
Open-DIS Python发送DIS实体状态PDU:实现坦克炮塔与主炮部件参数
java·网络·python·dis