You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何编写方法彻底移除列表中的众数?

彻底移除列表中的众数解决方案

你的初始列表是[1, 3, 4, 6, 3, 1, 3],目标是移除所有出现次数最多的元素(这里是3),得到[1, 4, 6, 1]。

为什么remove()达不到效果?

list.remove(x)只会删除列表中第一个匹配x的元素,循环调用时会因为列表长度动态变化导致漏删——比如原列表长度是7,删除一个元素后长度变为6,后续循环索引会错位,跳过部分元素。

正确实现思路

  1. 统计每个元素的出现次数,找到出现频次最高的元素(众数)
  2. 过滤原列表,保留所有不等于众数的元素

代码实现(用collections.Counter快速统计)

from collections import Counter

original_list = [1, 3, 4, 6, 3, 1, 3]
# 统计每个元素的出现次数
counts = Counter(original_list)
# 获取出现次数最多的元素(众数)
mode = max(counts, key=counts.get)
# 过滤掉所有众数,生成新列表
result_list = [num for num in original_list if num != mode]

print(result_list)  # 输出: [1, 4, 6, 1]

纯基础Python实现(不依赖第三方库)

如果不想用Counter,可以手动统计频次:

original_list = [1, 3, 4, 6, 3, 1, 3]
count_dict = {}
# 手动遍历统计每个元素的出现次数
for num in original_list:
    count_dict[num] = count_dict.get(num, 0) + 1
# 找到出现次数的最大值
max_count = max(count_dict.values())
# 提取所有出现次数等于最大值的元素(这里只有3)
mode = [k for k, v in count_dict.items() if v == max_count][0]
# 过滤生成结果列表
result_list = [num for num in original_list if num != mode]

print(result_list)  # 输出: [1, 4, 6, 1]

注:如果列表存在多个众数(多个元素出现次数相同且为最高),只需把过滤条件改成num not in modes(modes是所有众数的列表)即可一次性移除所有众数。

内容的提问来源于stack exchange,提问作者Slope10

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 15:40:50