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

Python如何移除多维数组中的重复值

问题原因

set()无法直接给二维列表去重,是因为集合仅能存储**可哈希(hashable)**的对象,而列表是可变类型,不支持哈希计算,直接传入嵌套列表会触发TypeError: unhashable type: 'list'报错,根本走不到去重逻辑。

解决方案
  • 保留元素原有顺序(推荐)
    Python 3.7及以上版本的字典默认保留键的插入顺序,我们可以先把每个子列表转成可哈希的元组,利用字典键自动去重的特性完成过滤,最后再把元组转回列表即可,全程不会打乱元素第一次出现的顺序:

    arr = [[3, 5],
           [2, 5],
           [9, 7],
           [3, 5]]
    
    unique_arr = [list(item) for item in dict.fromkeys(tuple(sub) for sub in arr)]
    

    运行后unique_arr的输出就是你期望的结果:

    [[3, 5], [2, 5], [9, 7]]
    
  • 不要求严格保留顺序时的简化写法
    如果你不需要严格对齐原数组的元素顺序,可以直接用集合完成去重,代码更短:

    arr = [[3, 5],
           [2, 5],
           [9, 7],
           [3, 5]]
    
    unique_arr = [list(item) for item in set(tuple(sub) for sub in arr)]
    

    注意:Python 3.7之前的版本集合是无序的,返回结果的元素排列顺序可能和原数组不一致,生产环境对顺序有要求时优先选第一种方案。

如果你的数组嵌套层级超过2层,只需要写个简单的递归函数把所有内嵌列表转成元组即可,上述二维场景下这两段代码可以直接复用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 04:39:17