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

如何从含嵌套列表的混合列表中去除重复元素?

混合嵌套列表的元素去重方法

直接用set()处理包含嵌套列表的混合列表会报错,因为列表是不可哈希类型,无法存入集合。要实现对这类列表的元素去重,需要针对性处理不可哈希元素,以下是两种实用方案:

方案1:递归处理所有层级的嵌套列表

如果需要对所有层级的列表元素都去重(包括嵌套列表内部的元素),可以用递归方法:

def unique_elements(lst):
    processed = []
    seen = set()
    for item in lst:
        if isinstance(item, list):
            # 先递归处理嵌套列表的内部元素
            nested_unique = unique_elements(item)
            # 将嵌套列表转为可哈希的元组,用于判断重复
            item_tuple = tuple(nested_unique)
            if item_tuple not in seen:
                seen.add(item_tuple)
                processed.append(nested_unique)
        else:
            # 普通可哈希元素直接判断重复
            if item not in seen:
                seen.add(item)
                processed.append(item)
    return processed

示例测试

假设你的目标列表是:

test_list = [
    ['1', '1'],
    ['2', '2'],
    ['3', '3', '4', '5', '6'],
    ['7', '8', ['7', '7'], '1', ['7']],
    [['7'], ['8', '8'], ['7'], ['7']],
    ['2', '2']
]

调用函数后输出结果:

[
    ['1'],
    ['2'],
    ['3', '4', '5', '6'],
    ['7', '8', ['7'], '1'],
    [['7'], ['8']],
    ['2']
]

方案2:仅处理顶层子列表的元素

如果只需要对每个顶层子列表的元素去重(不处理嵌套列表内部的元素),用非递归方法更高效:

def unique_sublist_elements(lst):
    result = []
    for sublist in lst:
        unique_items = []
        seen = set()
        for item in sublist:
            if isinstance(item, list):
                # 嵌套列表转元组判断是否重复
                item_key = tuple(item)
                if item_key not in seen:
                    seen.add(item_key)
                    unique_items.append(item)
            else:
                if item not in seen:
                    seen.add(item)
                    unique_items.append(item)
        result.append(unique_items)
    return result

关键说明

  • 两种方案都通过将嵌套列表转为元组(可哈希类型)解决了不可哈希元素的去重问题
  • 遍历过程中会保留元素的原始顺序(Python 3.7+ 特性,若用旧版本可改用collections.OrderedDict)
  • 递归方案适合深度嵌套的列表结构,非递归方案更适合仅需处理顶层子列表的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 11:35:29