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

如何从列表中获取仅唯一值?彻底删除重复元素而非仅去重

彻底删除列表中所有重复元素(移除所有出现过多次的项)

嘿,这个需求我之前做项目的时候刚好碰到过!常规的去重方法比如转集合,确实只能保留每个元素的一个实例,但要彻底删掉所有存在重复的元素本身(也就是只要元素出现超过一次,就完全从结果里消失),得换个思路——核心就是先统计每个元素的出现次数,再筛选出仅出现一次的元素。

下面我用Python举几个实用的实现方法,你可以根据自己的场景选:

方法1:用collections.Counter(最简洁直观)

Counter是Python标准库的工具,专门用来统计元素出现次数,代码非常简洁:

from collections import Counter

def get_only_unique_items(lst):
    item_counts = Counter(lst)
    # 只保留出现次数恰好为1的元素,还能维持原列表的顺序
    return [item for item in lst if item_counts[item] == 1]

举个例子:
原列表:[1, 2, 2, 3, 4, 4, 5, 6]
运行后结果:[1, 3, 5, 6]

方法2:手动统计次数(无需导入库)

如果不想依赖额外库,手动遍历统计也很简单,逻辑和上面一致:

def get_only_unique_items(lst):
    item_counts = {}
    # 第一步:遍历列表,统计每个元素的出现次数
    for item in lst:
        item_counts[item] = item_counts.get(item, 0) + 1
    # 第二步:筛选出仅出现一次的元素
    return [item for item in lst if item_counts[item] == 1]

特殊情况:列表包含不可哈希元素(比如子列表)

如果你的列表里有像子列表这种不可哈希的元素,Counter就没法直接用了,这时候可以把不可哈希元素转成可哈希的类型(比如元组)来统计:

def get_only_unique_items(lst):
    item_counts = {}
    for item in lst:
        # 把列表转成元组作为统计的键,其他类型直接用本身
        key = tuple(item) if isinstance(item, list) else item
        item_counts[key] = item_counts.get(key, 0) + 1
    
    # 筛选的时候同样处理键
    result = []
    for item in lst:
        key = tuple(item) if isinstance(item, list) else item
        if item_counts[key] == 1:
            result.append(item)
    return result

测试一下:
原列表:[[1,2], [3,4], [1,2], [5]]
运行后结果:[[3,4], [5]]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:37:31