如何对元素为列表的CB列表去重?np.unique和list(set())无效
解决列表中子列表去重的问题
问题分析
你遇到的问题是:二维列表里的子列表无法直接用set去重(因为列表是不可哈希类型),而np.unique会扁平化数组,返回单个元素的去重结果,不符合需求。
最简单的解决方案
1. 不保留原顺序的单行代码
利用tuple可哈希的特性,先把每个子列表转成元组去重,再转回列表:
CB = [[0, 0], [0, 1], [0, 2], [0, 1], [1, 1], [1, 2], [0, 2], [1, 2], [2, 2]] CB1 = [list(t) for t in set(tuple(item) for item in CB)]
2. 保留原顺序的单行代码(Python 3.7+)
利用Python 3.7及以上版本中字典的有序性,用dict.fromkeys实现去重同时保留子元素首次出现的顺序:
CB1 = [list(x) for x in dict.fromkeys(map(tuple, CB))]
结果验证
两种方法最终都会得到你需要的结果:[[0,0], [0,1], [0,2], [1,1], [1,2], [2,2]](第一种方法顺序可能随机,第二种和原列表中子元素首次出现的顺序一致)。
内容的提问来源于stack exchange,提问作者ExcitedSnail
相关产品推荐
相关产品推荐

