如何移除二维列表中元素相同但顺序不同的重复子列表
移除嵌套列表中元素组成相同但顺序不同的重复子列表
给定嵌套列表:
nestedlist = [[1,2,3,4],[4,3,2,1],[1,5,8,7]]
需要编写函数处理后返回:
[[1,2,3,4],[1,5,8,7]]
方法一:集合+排序标记去重
核心思路是给每个子列表生成唯一标识:将子列表排序后转为元组(列表不可哈希,无法存入集合),用集合记录已经出现过的标识,遍历原列表时只保留首次出现的子列表。
def remove_duplicate_sublists(nested_list): seen = set() result = [] for sublist in nested_list: key = tuple(sorted(sublist)) if key not in seen: seen.add(key) result.append(sublist) return result # 测试示例 nestedlist = [[1,2,3,4],[4,3,2,1],[1,5,8,7]] print(remove_duplicate_sublists(nestedlist))
执行后输出:
[[1, 2, 3, 4], [1, 5, 8, 7]]
方法二:字典存储唯一子列表
和方法一逻辑一致,用字典的键存储排序后的元组,值保存原列表,最终提取字典的值即可得到去重后的结果。
def remove_duplicate_sublists(nested_list): unique_map = {} for sublist in nested_list: key = tuple(sorted(sublist)) if key not in unique_map: unique_map[key] = sublist return list(unique_map.values()) # 测试示例 nestedlist = [[1,2,3,4],[4,3,2,1],[1,5,8,7]] print(remove_duplicate_sublists(nestedlist))
注意事项
- 上述方法仅适用于子列表元素为可哈希类型(如数字、字符串)的情况,如果子列表包含不可哈希元素(如嵌套列表),需要额外处理元素的唯一性判断。
- 两种方法都会保留原列表中首次出现的目标子列表,符合示例需求。
内容的提问来源于stack exchange,提问作者Robert Selangor
相关产品推荐
相关产品推荐

