Python:如何获取列表中出现次数最多的所有元素(允许并列)
实现方案
你原来使用的max(lst, key=lst.count)仅会返回第一个匹配最高出现次数的元素,无法处理并列场景,以下提供两种可用的实现方式:
1. 无额外依赖基础实现(适合短列表)
核心逻辑是先算出全局最高出现次数,再筛选所有出现次数等于该值的元素,支持保留元素在原列表中首次出现的顺序:
def get_all_most_frequent(lst): max_count = max(lst.count(item) for item in lst) result = [] for item in lst: if lst.count(item) == max_count and item not in result: result.append(item) return result
调用示例:
lst = [1,1,2,2] print(get_all_most_frequent(lst)) # 输出 [1, 2]
注意:该实现时间复杂度为O(n²),列表长度较大时性能较差
2. 基于Counter的高效实现(推荐,适合所有场景)
使用Python标准库collections.Counter统计元素出现次数,仅需两次遍历即可得到结果,时间复杂度为O(n):
from collections import Counter def get_all_most_frequent(lst): count_dict = Counter(lst) max_count = max(count_dict.values()) return [item for item, count in count_dict.items() if count == max_count]
调用示例:
lst = ["a", "b", "a", "c", "b", "b", "a"] print(get_all_most_frequent(lst)) # 输出 ['a', 'b']
Python 3.7及以上版本中,该实现返回结果会自动保留元素在原列表中首次出现的顺序
内容的提问来源于stack exchange,提问作者user13688215
相关产品推荐
相关产品推荐

