Python实现:将列表中出现超2次的元素最多保留2次
列表元素限次保留实现方案
需求说明
- 原始输入列表:
A=[1,1,1,2,2,2,4,5,6,6,7,7,7] - 处理规则:所有出现次数超过2次的元素,最终最多保留2次,且保留原列表元素顺序
- 预期输出:
new_A=[1,1,2,2,4,5,6,6,7,7]
基于Counter的最优实现
你已经用到的collections.Counter是做频次统计非常方便的工具,不需要提前统计全表频次再做二次过滤,边遍历边计数的写法逻辑最简洁、运行效率也最高,完整可运行代码如下:
from collections import Counter # 原始列表 A = [1,1,1,2,2,2,4,5,6,6,7,7,7] # 初始化计数器 element_counter = Counter() new_A = [] for num in A: # 当前元素累计出现次数不足2次时,才加入结果列表 if element_counter[num] < 2: new_A.append(num) element_counter[num] += 1 print(new_A)
运行后输出结果和预期完全一致:[1, 1, 2, 2, 4, 5, 6, 6, 7, 7]
无依赖原生实现
如果不想导入collections模块,用普通字典做计数也能实现完全一样的效果:
A = [1,1,1,2,2,2,4,5,6,6,7,7,7] count_map = {} new_A = [] for num in A: current_count = count_map.get(num, 0) if current_count < 2: new_A.append(num) count_map[num] = current_count + 1 print(new_A)
注意:不要采用先统计全量频次、再按频次切片拼接的写法,这种写法很容易破坏原列表的元素顺序,且代码冗余度更高,不推荐使用。
内容的提问来源于stack exchange,提问作者Kaiye Yang
相关产品推荐
相关产品推荐

