Python3统计列表元素出现次数并降序排序,求更Pythonic实现
Python 列表元素计数与降序排序的Pythonic实现
需求说明
统计列表Names中各元素的出现次数,并按照出现次数降序输出结果。
原有代码可优化点
- 冗余变量
aux_list无实际作用,且if name is not aux_list属于逻辑错误(判断的是对象内存地址,永远返回True,相当于无效判断) - 循环内重复调用
list.count(),时间复杂度为O(n²),列表元素越多性能损耗越明显 - 逐次构造单键字典再调用
update()更新总字典的写法过于冗余
最优Pythonic实现
Python标准库collections中的Counter是专门用于元素计数的工具,内置的most_common()方法直接支持按出现次数降序返回结果,代码极简且性能最优:
from collections import Counter names = ["Jessica", "John", "Steve", "John", "John", "Steve"] # 计数+排序+输出一气呵成 for name, count in Counter(names).most_common(): print(name, count)
无额外导入的原生实现
如果不想引入标准库导入,也可以用原生字典实现,写法同样简洁高效:
names = ["Jessica", "John", "Steve", "John", "John", "Steve"] count_map = {} for name in names: count_map[name] = count_map.get(name, 0) + 1 # 按计数降序排序后输出 for name, count in sorted(count_map.items(), key=lambda x:x[1], reverse=True): print(name, count)
两种实现的输出都和要求的结果完全一致:
John 3 Steve 2 Jessica 1
内容的提问来源于stack exchange,提问作者Andre
相关产品推荐
相关产品推荐

