首页 > 编程 > Python > 正文

Python实现按学生年龄排序的实际问题详解

2020-02-16 02:09:26
字体:
来源:转载
供稿:网友

前言

本文主要给大家了关于利用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

# 生成包含随机学生对象的listdef 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.

key里接收的可以是某一个指定的函数(如lambda函数)返回的一个值,作为指定的比较依据。 reverse默认是False从小到大排序,设置为True后可以从大到小。

关于稳定性的说明:

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表