
直接用 collections.Counter 最简洁高效,一行就能解决。
用 Counter 统计并取最大值
Counter 会自动统计每个元素出现的次数,再调用 most_common(1) 返回出现次数最多的元素及其频次。
- 返回的是一个列表,含一个元组,如
[('a', 3)],取[0][0]即可拿到元素本身 - 如果多个元素并列最多,
most_common(1)只返回第一个遇到的(按统计顺序,非字典序)
示例:
from collections import Counternums = [1, 3, 2, 3, 4, 3, 2]
most = Counter(nums).most_common(1)[0][0]
print(most) # 输出:3
用 max + list.count(适合小列表)
不依赖额外模块,利用 max 的 key 参数,对列表中每个唯一值调用 count() 比较次数。
立即学习“Python免费学习笔记(深入)”;
- 效率较低,因为对每个不同元素都遍历一次原列表,时间复杂度 O(n²)
- 适合数据量小、不想引入模块的场景
示例:
items = ['apple', 'banana', 'apple', 'cherry', 'apple']most = max(set(items), key=items.count)
print(most) # 输出:'apple'
手动遍历统计(理解原理用)
用字典记录频次,再遍历字典找最大值。逻辑清晰,便于调试或定制逻辑(比如要所有最高频元素)。
- 遍历时可同时记录最大频次和对应元素,只需一次遍历
- 若需返回所有并列最多的元素,可先统计再筛选频次等于最大值的键
示例(只取一个):
data = [5, 5, 1, 9, 5, 9]count_dict = {}
for x in data:
count_dict[x] = count_dict.get(x, 0) + 1
most = max(count_dict, key=count_dict.get)
print(most) # 输出:5
处理并列最多的情况
默认方法只返回一个。若需全部最高频元素,可用 Counter 配合推导式:
from collections import Counterarr = [2, 2, 3, 3, 1]
c = Counter(arr)
max_count = max(c.values())
all_most = [x for x, cnt in c.items() if cnt == max_count]
print(all_most) # 输出:[2, 3]










