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
相关产品推荐
相关产品推荐

