关于传入列表出现元素次数排序题目的一点心得

首先把题目贴出来:

        给定一个只包含正整数且非空的数组(如[1,6,7,4,4,5,4,5,4,5,5,6,7,8,5,6,7,3,4,2,2,1,4,8,9,4,5,6]),返回该数组中重复次数最多的前N个数字(返回结果按重复次数从多到少降序排列,N不存在取值非法的情况),请用熟悉的语言实现该需求 

然后是代码:

class Homework():
    def Array(self):
        input_array = []
        while True:
            list = input("请输入你要记录的数组数字,回车确定,'Q'退出:
")
            if list.isdigit() == True:
                input_array.append(list)
                print(input_array)
            elif list == "Q":
                return input_array
            else:
                print("输入错误,请重新输入!")
                continue
    def Frequency(self,input_array=[]):
        print(input_array)
        frequency = {}
        for i in range(len(input_array)):
            key  = input_array[i]
            num = input_array.count(key)
            dict_1 = { key : num }
            frequency.update(dict_1)
        return frequency
    def Sort(self,frequency):
        d = sorted(frequency.items(),key=lambda item:item[1],reverse=True)
        print("按照出现次数从多到少排序情况如下:
")
        for i in range(len(d)):
            print('{}出现{}次'.format(d[i][0],d[i][1]))
if __name__ == '__main__':
    input_array = Homework().Array()
    frequency = Homework().Frequency(input_array)
    Homework().Sort(frequency)

第一点:传入字典或者列表的参数最好为(self,list)或者(self,dict),不然会冒出奇怪的参数,比如object at 0x0000028FC5B70588,这个参数莫名其妙的出现,卡了我很久 ,然后加了self才把这个参数分离出去

第二点:字典经过sorted排序之后的类型就不再是dict而是list了,最开始我以为排序后依旧是字典,用字典的取执法反而报错,加了断点才发现排序后的类型变了,以后要注意

第三点:如果想要sorted排序后依旧是字典,可以在最外层加dict()方法,例如 

d = dict(sorted(frequency.items(),key=lambda item:item[1],reverse=True))

就行了,不过还是之前的哪句话,尽量避免无意义的参数类型转换,所以最后还是按照列表类型取值

总之,收获还是蛮多的

原文地址:https://www.cnblogs.com/keima/p/10425604.html