You need to enable JavaScript to run this app. Python如何从嵌套列表中移除完全相同的重复子列表?
优惠活动
大模型
产品
解决方案
定价
更多

Python如何从嵌套列表中移除完全相同的重复子列表?

嵌套列表去重实现指南

现有代码的核心问题

  • 代码已经完成了列表拼接、子列表转可哈希元组的前置步骤,但遗漏了关键赋值环节:仅通过print(set(a))打印了去重结果,没有将去重后的集合重新赋值回变量a。
  • 此时变量a仍为拼接后包含重复元素的原始列表(总长度7,其中[1,2,3]、[0,1,2]各重复出现1次),因此后续统计的长度、输出的列表内容,都不是去重后的预期结果。

实现方案

快速修正原有代码

Python中列表属于不可哈希类型,无法直接放入集合去重,需要先转换为可哈希的元组完成去重,再转回列表格式即可:

a1 = [[1,2,3],[2,3,4]]
a2 = [[0,1,2],[2,4,6]]
a3 = [[1,2,3],[0,1,2],[3,6,9]]
# 拼接初始列表
a = a1 + a2 + a3
# 核心修正:将元组序列去重后重新赋值回a
a = list(set([tuple(l) for l in a]))
# 元组转回嵌套列表格式
a = [list(ele) for ele in a]
print(a)
print(len(a))

注意:Python 3.7及以上版本的集合会保留元素首次出现的顺序,最终输出的列表顺序和目标结果完全一致。

全版本兼容的保序去重写法

如果需要在所有Python版本下严格保证元素顺序和首次出现时一致,不依赖集合的顺序特性,可以通过遍历+已见元素记录的方式实现:

a1 = [[1,2,3],[2,3,4]]
a2 = [[0,1,2],[2,4,6]]
a3 = [[1,2,3],[0,1,2],[3,6,9]]
seen = set()
a = []
# 遍历所有拼接后的子列表
for sublist in a1 + a2 + a3:
    # 转成元组作为可哈希的比对标识
    key = tuple(sublist)
    if key not in seen:
        seen.add(key)
        a.append(list(key))
print(a)
print(len(a))

两种方案执行后,最终得到的列表a长度为5,内容和目标结果[[1,2,3],[2,3,4], [0,1,2],[2,4,6],[3,6,9]]完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.28 10:54:03