列表---数字出现次数排序

题目要求

【问题描述】
给定n个整数,请统计出每个整数出现的次数,按出现次数从多到少的顺序输出。
【输入形式】
第一行包含一个整数n,表示给定数字的个数; 第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
【输出形式】
输出有多行,每行包含两个整数,分别表示一个给定的整数和它出现的次数。按出现次数递减的顺序输出。如果两个整数出现的次数一样多,则先输出值较小的,然后输出值较大的。
【样例输入】
12
5 2 3 3 1 3 4 2 5 2 3 5
【样例输出】
3 4
2 3
5 3
1 1
4 1
【样例说明】
n不超过1000,给出的数为2,000,000,000以内的非负整数。

代码部分

n = int(input())#输入整数个数
num_str = input()#输入整数,以空格隔开
num_list = [0]*n
str_list = num_str.split()
for i in range(0,n):
    num_list[i] = int(str_list[i])
num_set = set(num_list)
count_list = [0]*len(num_set)
dif_num_list = list(num_set)
dif_num_list.sort()#数字由小到大排序
for i in range(0,len(num_set)):
    count_list[i] = num_list.count(dif_num_list[i])#每个数字出现的次数
num_dirt = dict.fromkeys(dif_num_list)#以不同的数字为键创建字典
j = 0
for k in dif_num_list:
    num_dirt[k] = count_list[j]#数字、次数键值对
    j += 1
count_list.sort(reverse=True)#次数由大到小排序
result_list = [0]*len(num_set)
for k in dif_num_list:
    loc = count_list.index(num_dirt[k])
    while result_list[loc]:#如果loc位置已经有数字(不同的数字出现相同的次数)的话,向后移一位,直到未添加数字的位置
        loc +=1
    result_list[loc] = k
for i in range(0,len(num_set)):
    print(result_list[i],count_list[i])

运行结果

12
5 2 3 3 1 3 4 2 5 2 3 5

3 4
2 3
5 3
1 1
4 1

猜你喜欢

转载自blog.csdn.net/weixin_43993238/article/details/88921717