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]

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

相关推荐
苏三福1 小时前
ros2 hunmle bag 数据包转为图片数据 python版
开发语言·python·ros2humble
大神薯条老师2 小时前
Python零基础入门到高手8.4节: 元组与列表的区别
开发语言·爬虫·python·深度学习·机器学习·数据分析
z人间防沉迷k2 小时前
堆(Heap)
开发语言·数据结构·笔记·python·算法
小白学大数据2 小时前
Python爬虫如何应对网站的反爬加密策略?
开发语言·爬虫·python
Eric.Lee20213 小时前
Ubuntu shell指定conda的python环境启动脚本
python·ubuntu·conda·shell
芒果量化3 小时前
量化交易 - 网格交易策略实现与原理解析
python·算法·机器学习·金融
LetsonH3 小时前
Python工具链UV整合环境管理
开发语言·python·uv
欣然~3 小时前
基于深度学习进行运输系统优化
python·深度学习
王有品4 小时前
Java 集合框架对比全解析:单列集合 vs 双列集合
java·windows·python
北漂老男孩4 小时前
ChromeDriver 技术生态与应用场景深度解析
java·爬虫·python·自动化