{/'title/':/'Python 多关键字排序练习:学生信息排序/',/'description/':/'本练习使用 Python 对学生信息列表进行多关键字排序,涵盖姓名、成绩和年龄的排序。通过代码示例和详细解释,帮助读者理解 Python 中的排序算法和关键字的使用。/',/'keywords/':/'python, 排序, 多关键字排序, sorted, lambda, 列表, 元组, 学生信息/',/'content/':/'///'请将下述程序补充完整并上机调试,使其可以生成期望的排序结果。////n////npython//n#列表students记录了多名学生信息,每名学生包含姓名,成绩,年龄//nstudents = [('John','A',25), ('Mike','C',19),//n ('Mike','B',12), ('Mike','C',18),//n ('Bom','D',10), ('Mike','D',19)]////n////nstuA = students.copy()//nstuA.sort()//nprint(stuA)////n////ndef myKey(x)://n return (x[2], x[1], x[0])////n////nstuB = sorted(students,key = myKey)//nprint(stuB)////n////nstuC = sorted(students,key = lambda x: (x[1], int(x[2])))//nprint(stuC)////n////ndef myKey2(x)://n return (-x[2], x[1], x[0])////n////nstudents.sort(key = myKey2)//nprint(students)//n////n////n期望的执行结果:////n////npython//n[('Bom', 'D', 10), ('John', 'A', 25), ('Mike', 'B', 12), ('Mike', 'C', 18), ('Mike', 'C', 19), ('Mike', 'D', 19)]//n[('Bom', 'D', 10), ('Mike', 'B', 12), ('John', 'A', 25), ('Mike', 'C', 18), ('Mike', 'C', 19), ('Mike', 'D', 19)]//n[('John', 'A', 25), ('Mike', 'B', 12), ('Mike', 'C', 19), ('Mike', 'C', 18), ('Bom', 'D', 10), ('Mike', 'D', 19)]//n[('John', 'A', 25), ('Mike', 'C', 19), ('Mike', 'D', 19), ('Mike', 'C', 18), ('Mike', 'B', 12), ('Bom', 'D', 10)]//n////n////n【解题提示】////n////n输出1表明第7行代码对列表stuA按其元素从小到大升序排列。这里元素为一个个元组,按元组大小比较规则可知,此处就是一个多关键字排序。先按姓名升序排,再按表示成绩的字符串的升序排,最后按年龄的升序排列。//n输出2表明12行代码对students列表按年龄的个位数字的大小进行了排序,并将结果列表赋值给了变量stuB。第11行应该返回实现此功能的关键字。('Mike', 'C', 19)这个元素与元素('Mike', 'D', 19)的个位数字相同,在python语言中,sorted函数的排序是稳定排序,关键字相同的元素保持原始列表中的先后顺序。//n输出3表明第15行对students列表的排序按成绩由高到低进行(成绩是字符串)。关键字通过lambda函数赋值,lambda函数请参考教材第7章。//n输出4表明第20行对students列表的排序先按年龄从高到低,再按成绩字符串从低到高(成绩从高到低),再按姓名升序进行。//nmyKey2函数的参数x,我们可理解为代表一个元素。返回值应是一个元组,表示是一个多关键字的排序。//n当多关键字排序时,如果排序规则里有的要求升序,有的要求降序,我们必须将其统一。统一的方式是对数值取相反数,相反数的升序相当于原数据的降序,反之亦然。/


原文地址: https://www.cveoy.top/t/topic/pOoa 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录