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

如何从Python的列表嵌套列表中去除重复子列表?

如何高效去除嵌套列表中的重复子列表

问题背景

我是Python新手,需要处理嵌套列表的去重需求。示例如下:
输入:

List = [[1, 'A', 6, 2], [8, 'C', 6, 2], [3, 'G', 3, 4], [1, 'A', 6, 2], [3, 'G', 3, 4], [3, 'B', 3, 4]]

期望输出:

[[1, 'A', 6, 2], [8, 'C', 6, 2], [3, 'G', 3, 4], [3, 'B', 3, 4]]

原本用以下for循环实现,但数据量大时速度极慢:

unique = []
for i in cohesiveFaceNodes:
    if not i in unique:
        unique.append(i)
cohesiveFaceNodes = unique

高效解决方案

方案1:集合+元组(最快,不保证顺序)

列表是不可哈希类型,无法直接存入集合,先把每个子列表转成可哈希的元组,去重后再转回列表:

# 转元组去重,再转回列表
unique_tuples = set(tuple(sublist) for sublist in cohesiveFaceNodes)
unique_list = [list(t) for t in unique_tuples]

提示:集合是无序的,所以最终结果会打乱原列表的顺序。如果不需要保留顺序,这是性能最优的方案——集合的成员判断是O(1)时间复杂度,远快于列表的O(n)。

方案2:利用Python 3.7+字典的有序性(保留原顺序)

Python 3.7及以上版本的字典会保留插入顺序,用元组作为键实现去重,最后提取键转回列表:

# 有序去重,保留子列表首次出现的顺序
unique_dict = {tuple(sublist): None for sublist in cohesiveFaceNodes}
unique_list = [list(t) for t in unique_dict.keys()]

这个方案的时间复杂度是O(n),比原方法的O(n²)效率提升巨大,同时能维持原列表的顺序。

方案3:dict.fromkeys简洁实现(保留顺序)

用dict.fromkeys可以更简洁地完成和方案2一样的效果:

unique_list = [list(t) for t in dict.fromkeys(tuple(sublist) for sublist in cohesiveFaceNodes)]

原方法慢的原因

原循环中,每次执行if not i in unique都要遍历整个unique列表,时间复杂度是O(n²)——比如列表有1000个元素,就要执行1000*1000=100万次操作;如果是1万个元素,就是1亿次,数据量越大越慢。而上面的方案用集合或字典,查找操作都是O(1),整体仅需O(n)时间,效率提升非常明显。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 17:03:20