Python列表元素出现频率统计及高效实现方案
列表唯一值频率统计实现
你当前的代码遍历了包含重复元素的原列表,每次调用count()都会全表扫描统计元素出现次数,最终得到的列表长度和原列表一致,不符合你要的「按唯一值顺序返回对应频率」的需求。
最高效实现方案
Python标准库提供的collections.Counter是该需求的最优实现,底层做了性能优化,仅需遍历列表一次就能完成所有唯一值的频率统计,时间复杂度为O(n),性能远高于手动遍历调用count()的方案。
示例代码如下:
from collections import Counter fruits = ["apple", "banana", "cherry", "apple", "banana"] # 统计所有唯一值的出现频率,返回结构按元素首次出现的顺序排序 fruit_counts = Counter(fruits) # 提取频率组成列表 result = list(fruit_counts.values()) print(result) # 输出:[2, 2, 1]
如果不想引入标准库依赖,也可以用字典手动实现统计,时间复杂度同样为O(n):
fruits = ["apple", "banana", "cherry", "apple", "banana"] count_map = {} for item in fruits: count_map[item] = count_map.get(item, 0) + 1 result = list(count_map.values()) print(result) # 输出:[2, 2, 1]
原写法的总时间复杂度为O(n²),仅适合小体量列表使用,当列表元素较多时性能会大幅下降,不推荐使用。
内容的提问来源于stack exchange,提问作者user16341274
相关产品推荐
相关产品推荐

