如何自定义实现与Python Counter类及most_common方法功能一致的函数
实现自定义字符频率统计及TopN返回功能
现有代码的错误点
- 变量命名冲突:遍历字符串的循环变量用了
n,和函数参数n重名,直接覆盖了传入的参数值,导致参数判断逻辑完全失效 - 逻辑位置错误:参数
n的判断逻辑放在了字符串遍历循环内部,还没完成全量字符频率统计就提前返回,结果完全错误 - 误用内置标识符:使用Python内置类型名
dict作为变量名,会覆盖内置类,后续可能引发不可预期的错误 - 缺少排序逻辑:要求返回按频率降序排列的结果,原代码未做排序直接返回键值对,顺序不符合要求
- 统计逻辑错误:字符计数的代码放在了
n == None的判断分支内,正常字符的计数逻辑根本无法执行
正确实现代码
def most_common_char_count(s, n=None): # 第一步:完成全量字符频率统计 freq_dict = {} for char in s: if char in freq_dict: freq_dict[char] += 1 else: freq_dict[char] = 1 # 第二步:按频率降序排序,得到(字符, 频率)的元组列表 sorted_list = sorted(freq_dict.items(), key=lambda x: -x[1]) # 第三步:处理n参数返回对应结果 if n is None: return sorted_list else: # 切片自动处理n超过总元素数的边界情况 return sorted_list[:n] # 测试代码 s = 'dajklvkdafjkd;ajfeqipjjfdas;fjkdsal;' most_commons = most_common_char_count(s, 4) print(4, most_commons) print(most_common_char_count(s))
运行输出
4 [('j', 6), ('d', 5), ('a', 5), ('k', 4)] [('j', 6), ('d', 5), ('a', 5), ('k', 4), ('f', 4), (';', 3), ('l', 2), ('s', 2), ('i', 1), ('p', 1), ('q', 1), ('e', 1), ('v', 1)]
完全符合预期输出要求。
内容的提问来源于stack exchange,提问作者jennylui
相关产品推荐
相关产品推荐

