例题
问题描述
景区在售票时,从游客身份证中提取了年龄信息。现在,景区管理员想知道,按年龄统计,游客数量最多的是什么年龄?
输入
只有一行,n 个游客年龄数据,数据为整数,两个数据之间有一个空格
输出
第一行:输出最多游客数量的年龄,相同数量的,优先输出年龄大的
第二行:输出最多游客的数量
样例
35 40 80 40 40 40 35 40 15 20
40
5
分析
要解决这道题,我们只需要创建一个列表,记录游客的年龄信息,然后找到列表中元素出现的频次,并找出出现次数最多的元素及其对应的出现次数
那么我们可以通过Python collections 模块中的 Counter 类来快速找到列表中出现最多的数字
Counter 是一个字典子类,用于计数可哈希对象(如本题中列表中的元素)的数量
实现
我们首先创建一个 Counter 对象 c,通过传入列表 lst 进行初始化。在这个过程中,Counter 对 lst 中的所有元素进行计数,结果是一个字典,其中键是列表中的元素,值是它们在列表中出现的次数
c = Counter(lst)
然后使用 Counter 的 most_common() 方法获取出现次数最多的元素。most_common() 方法返回一个列表,其中包含元组,每个元组包含一个元素及其出现次数,按出现次数从高到低排序
c.most_common(1)[0][0]
c.most_common(1)[0][1]
c.most_common(1)
表示我们只需要出现次数最多的那一个元素及其出现次数,因此传入参数 1[0][0]
和[0][1]
分别用于获取这个元组的第一个和第二个元素,也就是出现次数最多的元素及其对应的出现次数
再将出现次数最多的元素赋值给变量 a,出现次数赋值给变量 b
a = c.most_common(1)[0][0]
b = c.most_common(1)[0][1]
最后,分别打印出出现次数最多的元素 a 和其对应的出现次数 b
print(a)
print(b)
但要注意的是,本题中要求相同数量的,优先输出年龄大的。而使用这种方法会优先输出年龄小的,所以我们需要做一些改变
代码示例
from collections import Counter
lst = list(map(int, input().split()))
c = Counter(lst)
max_count = max(c.values())
max_ages = [age for age, count in c.items() if count == max_count]
max_ages.sort(reverse=True)
a = max_ages[0]
b = max_count
print(a)
print(b)