[导读]:超平老师的Scratch蓝桥杯真题解读系列在推出之后,受到了广大老师和家长的好评,非常感谢各位的认可和厚爱。作为回馈,超平老师计划推出《Python蓝桥杯真题解析100讲》,这是解读系列的第53讲。
数字次数排序,本题是2020年12月20日举办的第12届蓝桥杯青少组Python编程省赛真题,第12届一共有两场省赛,这是第一场。题目要求对输入的N个正整数,统计数字出现的次数,然后按照次数从高到低输出正整数。
先来看看题目的要求吧。
一.题目说明
编程实现:
输入N个正整数且正整数之间以一个逗号隔开,统计N个正整数中出现过的数字,以及每个数字重复出现的次数,将数字按出现次数由高到低进行排列(相同次数不分先后顺序)并输出,输出的数字之间以英文逗号隔开。
例如:输入的正整数为8,8,7,7,7,6,共出现了3个正整数为8、7、6。其中8出现了2次,7出现了3次,6出现了1次,按照次数由高到低排序后,输出的结果为7,8,6。
输入描述:
输入N个正整数且正整数之间以逗号隔开
输出描述:
输出所有出现过的数字,按照出现次数由高到低排序,数字之间以英文逗号隔开
样例输入:
8,8,7,7,7,6
样例输出:
7,8,6
二.思路分析
这是一道和集合数据类型相关的题目,考查的知识点主要包列表和字典。
Python之所以大受欢迎,是因为它提供了大量好用的数据类型和库函数。其中,和集合相关的数据类型包括列表(list)、元组(tuple)、字典(dict)和集合(set),它们统称为内置数据类型或集合数据类型。
这些数据类型在Python编程中非常常用,各自有着特定的用途和特性:
列表(List):列表是Python中的一个可变序列类型,用于存储一系列有序的元素。列表的元素可以是任何类型,包括其他列表(即列表可以嵌套)。
元组(Tuple):元组与列表相似,也是一个有序的元素集合。但是,元组是不可变的,这意味着一旦创建了一个元组,就不能更改它的内容。
字典(Dictionary):字典是一个无序的键值对集合。每个键都映射到一个值,键在字典中是唯一的,字典常用于存储需要快速查找的数据。
集合(Set):集合是一个无序的不重复元素序列。集合中的元素必须是不可变的类型,如整数、浮点数、字符串或元组,集合主要用于成员关系测试和消除重复元素。
我们以题目给出的样例数据为例进行分析,输入数据为:
8,8,7,7,7,6
首先,需要统计每个数字出现的次数,既要保持数字本身,还要保存出现的次数,这不是字典最擅长的么。
统计的过程相对比较简单,结果如下:
{
8: 2,
7: 3,
6: 1
}
知道了每个数字出现的次数,下一步就是排序了,对字典进行排序,按照出现次数从大到小依次排序。
如何对字典进行排序呢?
在Python中,字典本身是无序的,通常有如下3种排序方式:
-
对字典的键(keys)进行排序;
-
对字典的值(values)进行排序;
-
根据值对键进行排序;
前面两种比较简单,其本质就是使用keys()方法或者values()方法获取所有的键或者值,然后使用sorted()函数排序。
第三种稍微要麻烦一点,通常需要结合lambda匿名函数,排序的典型用法如下:
sorted(dict.keys(), key=lambda x: dict[x])
其意思是,对字典进行排序,排序的依据是值,返回的结果是键。这里的x表示的是键,它是前面dict.keys()获取的键,而dict[x]是通过键获取值,作为排序的依据。
排序完成之后,将键以列表的形式返回,对于上面的字典,返回结果如下:
[7, 8 ,6]
怎么样,字典排序还是非常好用的吧。
思路有了,接下来,我们就进入具体的编程实现环节。
三.编程实现
根据上面的思路分析,我们来编写程序如下:
代码不多,说明4点:
1). 在获取多个输入的数据时,使用了列表推导式的编程技巧;
2). 统计每个数字的次数的思路是循环遍历nums列表,判断数字在字典中是否存在,如果存在,则数量加1,否则将值设为1;
3). sorted()函数,默认是按照从小到大的顺序,可以使用reverse=True设置为逆序排列;
4). 最后输出时,使用join()函数将列表中的数据用逗号进行连接,但是它只能对字符串类型进行连接,因此需要先将列表中的数据转成字符串。
至此,整个程序就全部完成了,你也可以输入一串不同的整数来测试效果啦。
四.总结与思考
本题代码在10行左右,涉及到的知识点包括:
-
循环语句;
-
条件语句;
-
输入和输出处理;
-
列表的使用;
-
字典的使用及排序;
本题是省赛编程第3题,难度中等,代码虽然不多,但是涉及到的知识点不少,综合性比较强。
关键是对字典的灵活应用,主要有两点,一是如何使用字典来统计每个数字出现的次数,二是如何对字典进行排序。
和其他编程语言相比,Python提供的集合数据类型非强大,它们为处理和组织数据提供了灵活和高效的工具。
因此平常在学习的时候,我们一定要多加使用,这样才能体现Python的优势嘛。
超平老师给你留一道思考题,如果不使用字典排序,你还有其它的办法吗,该如何实现呢?
你还有什么好的想法和创意吗,也非常欢迎和超平老师分享探讨。
如果你觉得文章对你有帮助,别忘了点赞和转发,予人玫瑰,手有余香😄
需要源码的,可以移步至“超平的编程课”gzh。