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

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

相关推荐
蜗牛互联网42 分钟前
Python消费Responses SSE事件:增量文本、超时与取消
java·开发语言·人工智能·后端·python
statistican_ABin1 小时前
中国国际旅游发展分析报告—基于世界银行国际旅游数据的多维度分析
python·机器学习·旅游
青少儿编程课堂1 小时前
背包问题(0/1 背包与完全背包)解题精讲——动态规划入门
c++·python·算法·bfs·信息学竞赛
code2cat2 小时前
【随笔】MCP工具注解的信任边界:四个提示如何参与调用决策
python·ai agent·mcp
慢云智慧空间2 小时前
从设备智能到空间理解,慢云科技如何重新定义智慧建筑
python·科技
浮链序2 小时前
用 Claude Haiku 5.5 做子智能体路由,把 Agent 成本砍掉六成
人工智能·python·llm
冯一川2 小时前
安装Pyside 6
python
估值探索者3 小时前
【Python量化系统工程实战 #08】从脚本到生产:量化系统上线 checklist 的最小闭环
java·开发语言·jvm·python·数据挖掘·数据·股票数据api接口
李可以量化3 小时前
如何开通基于 AI 打造的 A 股量化策略(下):特征工程与大模型决策落地
python
万年咸鱼3 小时前
解决C语言的内存释放机制
java·c语言·python