前言

本文主要给大家了关于利用Python按学生年龄排序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:
问题:定义一个Class:包含姓名name、性别gender、年龄age,需要按年龄给学生排序。
输入:包含学生对象的List。
输出:按照年龄age进行排序好的List。
思路1:使用冒泡排序,比较相邻的学生,如果第一个学生的age值比第二个学生的age值大,那么就整体交换这两个元素。持续每次对越来越少的元素重复上面的步骤。一直到没有任何一对学生需要比较。
思路2:使用Python內建方法sorted()。
(这个问题其实是笔者面试时候手写的一个实际问题,比较面向小白,我们可以通过这样一个简单的问题复习Python的一些基础知识点)
1. 前期准备
1.1 定义Class
class Student(object): def __init__(self, name, gender, age): self.__name = name self.__gender = gender self.__age = age # 取得age属性 def getAge(self): return self.__age # 打印 def printStudent(self): return self.__name, self.__gender, self.__age
1.2 生成包含随机学生对象的List
# 生成包含随机学生对象的list def generateStudent(num): # num为需要生成的测试对象数 list = [] for i in range(num): randName = ''.join(random.sample(string.ascii_letters, 4)) randGender = random.choice(['Male', 'FeMale']) randAge = random.randint(10,30) s = Student(randName, randGender, randAge) list.append(s) return list
2. 开始排序
2.1 使用冒泡排序
思路已在开头介绍,我们直接来看代码:
def sortStudent(list): for i in range(len(list)): for j in range(1, len(list)-i): if list[j-1].getAge() > list[j].getAge(): list[j-1], list[j] = list[j], list[j-1] return list
2.2 使用Python內建方法sorted
配合lambda表达式使用,非常简洁,代码如下:
sorted(list, key=lambda student: student.getAge()) # 将对象的age属性作为排序的Key
我们在这里补充一下 sorted() 和 lambda表达式 的相关知识点:
2.2.1 sorted(iterable, *, key=None, reverse=False)
官方文档
关于参数的说明:
key specifies a function of one argument that is used to extract a comparison key from each list element: key=str.lower. The default value is None (compare the elements directly).
reverse is a boolean value. If set to True, then the list elements are sorted as if each comparison were reversed.
关于稳定性的说明:
The built-in sorted() function is guaranteed to be stable.
(看到官方文档的说明中写道,这个方法是保证稳定的哟!)
关于原理:Python内置的sorted()方法背后使用的是Timsort算法,当数据越接近Ordered Data的时候,时间复杂度越接近O(N)。在我们的这个问题中,年龄属性是比较符合Ordered Data的。感兴趣的可以点击Timsort查看更多哈!
2.2.2 lambda表达式
直接看一个简单的例子就能明白了~
>>> pairs = [('one',1),('two',2),('three',3),('five',5),('zero',0),('four',4)]
>>> sorted(pairs, key=lambda pair: pair[1]) # List中每个tuple对的排序依据是tuple中的第2个值
[('zero', 0), ('one', 1), ('two', 2), ('three', 3), ('four', 4), ('five', 5)]
3. 执行测试
构建测试用的随机数据,计算两种方法的执行时间进行比较~
if __name__ == '__main__':
# list 形式是[('hZDw', 'FeMale', 17)...]
list = generateStudent(10000)
# 方法1:使用冒泡排序
start_Time1 = time.time()
sortStudent(list)
end_Time1 = time.time()
# 方法1中,使用10000个测试数据的排序时间是22.243秒以上(非精确)
print('%s cost time %s' % ('sortStudent' , end_Time1 - start_Time1))
# 方法2:使用Python内建的sorted方法+lambda表达式
# 由于sorted方法背后使用的timsort方法,当数据越接近Ordered data的时候,时间复杂度越接近O(N)。
# 在这个例子里面,年龄属性是比较接近Ordered data的。
start_Time2 = time.time()
sorted(list, key=lambda student: student.getAge()) # 将对象的属性作为排序的Key
end_Time2 = time.time()
print('%s cost time %s' % ('sorted' , end_Time2 - start_Time2))
测试结果:
使用方法1(冒泡排序),当测试数据量是10000个的时候,排序时间是22.243秒左右。
使用方法2(內建方法),当测试数据量是1000000个的时候,排序时间的0.575秒左右。
虽然不是很精确,但差别显然可见啦!
以上。
如有错误,还望指正~
完整实现及测试可在Github找到:ActualProblem-Solution
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。
# python
# 按列排序
# 按时间排序
# 按某一列排序
# python 字典(dict)按键和值排序
# Python中对元组和列表按条件进行排序的方法示例
# python中合并两个文本文件并按照姓名首字母排序的例子
# python读取TXT到数组及列表去重后按原来顺序排序的方法
# python让图片按照exif信息里的创建时间进行排序的方法
# 这个问题
# 测试数据
# 多哈
# 的是
# 文档
# 秒左右
# 在这里
# 相关内容
# 在这个
# 第一个
# 就能
# 说了
# 如有
# 没有任何
# 两种
# 不多
# 不是很
# 执行时间
# 感兴趣
# 我们可以
相关文章:
如何通过虚拟主机快速完成网站搭建?
做企业网站制作流程,企业网站制作基本流程有哪些?
建站之星好吗?新手能否轻松上手建站?
如何在阿里云完成域名注册与建站?
建站之星2.7模板快速切换与批量管理功能操作指南
在线教育网站制作平台,山西立德教育官网?
如何在IIS7中新建站点?详细步骤解析
广州网站设计制作一条龙,广州巨网网络科技有限公司是干什么的?
如何正确下载安装西数主机建站助手?
网页设计与网站制作内容,怎样注册网站?
唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
如何快速搭建安全的FTP站点?
专业网站建设制作报价,网页设计制作要考什么证?
如何在Windows服务器上快速搭建网站?
南平网站制作公司,2025年南平市事业单位报名时间?
韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南
外贸公司网站制作,外贸网站建设一般有哪些步骤?
香港服务器网站搭建教程-电商部署、配置优化与安全稳定指南
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
如何解决ASP生成WAP建站中文乱码问题?
惠州网站建设制作推广,惠州市华视达文化传媒有限公司怎么样?
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
如何使用Golang table-driven基准测试_多组数据测量函数效率
h5网站制作工具有哪些,h5页面制作工具有哪些?
详解jQuery停止动画——stop()方法的使用
建站之星如何开启自定义404页面避免用户流失?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
制作电商网页,电商供应链怎么做?
网站制作公司广州有几家,广州尚艺美发学校网站是多少?
Android滚轮选择时间控件使用详解
建站之星云端配置指南:模板选择与SEO优化一键生成
制作宣传网站的软件,小红书可以宣传网站吗?
建站之星如何一键生成手机站?
打鱼网站制作软件,波克捕鱼官方号怎么注册?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
宿州网站制作公司兴策,安徽省低保查询网站?
如何快速查询网站的真实建站时间?
公司门户网站制作流程,华为官网怎么做?
如何在建站宝盒中设置产品搜索功能?
如何在橙子建站上传落地页?操作指南详解
css网站制作参考文献有哪些,易聊怎么注册?
官网网站制作腾讯审核要多久,联想路由器newifi官网
如何制作网站标识牌,动态网站如何制作(教程)?
网站制作哪家好,cc、.co、.cm哪个域名更适合做网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
c# await 一个已经完成的Task会发生什么
mc皮肤壁纸制作器,苹果平板怎么设置自己想要的壁纸我的世界?
如何通过宝塔面板实现本地网站访问?
*请认真填写需求信息,我们会在24小时内与您取得联系。