题目描述:输入一个整数,写出 其中基数出现次数。如523123:3 2 2 2 5 1 1 1
想法:用集合将数内基数找出,然后在数内循环找出每个基数出现次数,一起存入字典。
num = input("")
def frequencyOfDigits(number):
sum = {} #空字典用于储存
li_2 = list(map(int,number))#将输入的字符串转为整形列表,若直接set(number(int类型))会报错 ‘int’ not 。。。
li =set(li_2)#找出基数
for i in li:#便利集合(无序,不重复)
count = 0#统计每个基数出现次数
for j in li_2:
if i == j:
count += 1
sum[i] = count#存入字典sum【基数】=个数
li=sorted(li,reverse=True)#考虑到后面同等数量降序排列,故在以count大小排序前排好
for i in range(len(li)-1):#选择排序
m=i#用m保留i用于比较
for j in range(i+1,len(li)):
if sum[li[m]] < sum[li[j]]:
m=j#记录set中保存的有较大count数的键
li[i],li[m]=li[m],li[i]#交换set中对应count数的键
print(f"{li[i]} {sum[li[m]]}")#每次打印无序区最大值
print(f"{li[-1]} {sum[li[-1]]}")#最后一个无需比较单独所以打印出来
frequencyOfDigits(num)
写的较为复杂,光字典排序这个貌似有简便方法:
ls = list(sum.items())#将字典分装为元组元素的列表
ls.sort(key=lambda x: x[0], reverse=True)#按照元组第一个元素排序先
ls.sort(key = lambda x:x[1], reverse=True)#再按照元组的第二个元素count排序
print(ls)