python输入学生年龄_Python实现按学生年龄排序的实际问题详解

本文介绍了如何使用Python对包含学生对象的列表按年龄进行排序,分别通过冒泡排序算法和内置的sorted()方法实现。冒泡排序是一种基础排序算法,而sorted()方法结合lambda表达式则更为简洁高效。文中提供了详细代码示例,并对sorted()的稳定性及Timsort算法进行了简要说明。通过测试,发现sorted()方法在处理大量数据时性能更优。
摘要由CSDN通过智能技术生成

前言

本文主要给大家了关于利用Python按学生年龄排序的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍:

问题:定义一个Class:包含姓名name、性别gender、年龄age,需要按年龄给学生排序。

输入:包含学生对象的List。

输出:按照年龄age进行排序好的List。

思路1:使用冒泡排序,比较相邻的学生,如果第一个学生的age值比第二个学生的age值大,那么就整体交换这两个元素。持续每次对越来越少的元素重复上面的步骤。一直到没有任何一对学生需要比较。

思路2:使用Python內建方法sorted()。

(这个问题其实是笔者面试时候手写的一个实际问题,比较面向小白,我们可以通过这样一个简单的问题复习Python的一些基础知识点)

1. 前期准备

1.1 定义Class

1.2 生成包含随机学生对象的List

2. 开始排序

2.1 使用冒泡排序

思路已在开头介绍,我们直接来看代码:

2.2 使用Python內建方法sorted

配合lambda表达式使用,非常简洁,代码如下:

我们在这里补充一下 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.

key里接收的可以是某一个指定的函数(如lambda函数)返回的一个值,作为指定的比较依据。

reverse默认是False从小到大排序,设置为True后可以从大到小。

关于稳定性的说明:

The built-in sorted() function is guaranteed to be stable.

(看到官方文档的说明中写道,这个方法是保证稳定的哟!)

关于原理:Python内置的sorted()方法背后使用的是Timsort算法,当数据越接近Ordered Data的时候,时间复杂度越接近O(N)。在我们的这个问题中,年龄属性是比较符合Ordered Data的。感兴趣的可以点击Timsort查看更多哈!

2.2.2 lambda表达式

直接看一个简单的例子就能明白了~

3. 执行测试

构建测试用的随机数据,计算两种方法的执行时间进行比较~

测试结果:

使用方法1(冒泡排序),当测试数据量是10000个的时候,排序时间是22.243秒左右。

使用方法2(內建方法),当测试数据量是1000000个的时候,排序时间的0.575秒左右。

虽然不是很精确,但差别显然可见啦!

以上。

如有错误,还望指正~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对服务器之家的支持。

原文链接:https://segmentfault.com/a/1190000010872872

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值