首先把题目贴出来:
给定一个只包含正整数且非空的数组(如[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))
就行了,不过还是之前的哪句话,尽量避免无意义的参数类型转换,所以最后还是按照列表类型取值
总之,收获还是蛮多的