对区间排序

【问题描述】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

有区间列表[(0,5),(-2,7),(3,9),(-5,-1),(12,20)],每个区间由元组表示,元组的第一个元素表示左边界,第二个元素表示右边界,请编写程序对列表中的区间按左边界升序排序。XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

对区间排序输出结果:XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

[(-5,-1),(-2,7),(0,5),(3,9),(12,20)]XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【题前思考】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

根据问题描述,填写表5-1-3。XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

表5-1-3 问题分析XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

对区间排序XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【解题思路】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

Python的内置函数sorted( )或列表的方法sort( )都可以排序。这两个函数都提供了参数key用于指定排序的依据,key是一个函数,作用是从被排序数据中获得基本类型的数据用于排序。在这个问题中,被排序的数据是用元组表示的区间,所以需要定义一个函数getleft( ),从元组中取得表示左边界的数据,然后根据getleft( )函数返回数据排序。参数reverse=False表示升序,反之表示降序,默认值为False。XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【程序代码】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

对区间排序XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

对区间排序XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【代码分析】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

①:函数getleft( )的作用就是返回参数(表示区间的元组)的第1个元素,所以函数体只有一条语句return a[0]。XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

②:将getleft传递给参数key,调用列表a的sort方法为列表排序。排序的基本操作就是对列表中的元素进行比较和移动。比较的时候,该方法内部会调用key( )函数(此例中key被赋值为getleft( )从被排序数据中取得基本类型的数据进行比较,此例就是用区间的左边界进行排序。XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

【优化提升】XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

上例中的函数非常简单,仅返回一个值,为了简化程序,Python中引入了lambda表达式来表示这种简单函数。如上例中的函数getleft( )就可以表示为getleft=lambda a:a[0]。冒号前是参数,冒号后是返回值。用lambda表达式重写区间排序的程序如下:XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

print(sorted([(0,5),(-2,7),(3,9),(-5,-1),(12,20)],key=lambda x:x[0]))XNp100150满分答卷(100150.com)-青少年编程等级考试及竞赛题库

关 键 词

对区间排序

相关教程

提示声明

  • 免责声明:本站资源均来自网络或者用户投稿,仅供用于学习和交流:如有侵权联系删除!

猜你喜欢