刷题记录一

题目描述:输入一个整数,写出 其中基数出现次数。如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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

部落=͟͟͞͞(꒪ᗜ꒪ Fly sky

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值