Python从给定列表中删除重复的子列表

给定一个列表列表, 编写一个Python程序从给定列表中删除所有重复的子列表(也具有不同的顺序)。
例子:

Input : [[1], [1, 2], [3, 4, 5], [2, 1]] Output : [[1], [1, 2], [3, 4, 5]]Input : [['a'], ['x', 'y', 'z'], ['m', 'n'], ['a'], ['m', 'n']] Output : [['a'], ['x', 'y', 'z'], ['m', 'n']]

方法#1:Set理解+解包
我们的第一种方法是使用组理解已排序元组。在列表的每次迭代中, 我们将当前子列表转换为已排序的元组, 并返回所有这些元组的集合, 这又消除了子列表的所有重复出现, 从而删除了所有重复的重新排列的子列表。
# Python3 program to Remove repeated # unordered sublists from listdef Remove(lst): return ([ list (i) for i in { * [ tuple ( sorted (i)) for i in lst]}])# Driver code lst = [[ 1 ], [ 1 , 2 ], [ 3 , 4 , 5 ], [ 2 , 1 ]] print (Remove(lst))

输出如下:
[[1, 2], [3, 4, 5], [1]]

方法#2:使用set和sorted元组的map()。
# Python3 program to Remove repeated # unordered sublists from listdef Remove(lst): return list ( map ( list , ( set ( map ( lambda x: tuple ( sorted (x)), lst)))))# Driver code lst = [[ 1 ], [ 1 , 2 ], [ 3 , 4 , 5 ], [ 2 , 1 ]] print (Remove(lst))

输出如下:
[[1, 2], [3, 4, 5], [1]]

维持秩序–
方法3:使用排序的元组作为哈希
首先, 我们将一个空列表初始化为" res", 将一个集合初始化为" check"。现在, 对于列表中的每个子列表, 将子列表转换为已排序的元组并将其保存在" hsh"中。然后检查检查中是否存在hsh。如果不是, 请将当前子列表附加到" .res", 将" hsh"附加到" check"。这样, 可以更轻松地维护子列表的顺序。
# Python3 program to Remove repeated # unordered sublists from listdef Remove(lst): res = [] check = set ()for x in lst: hsh = tuple ( sorted (x)) if hsh not in check: res.append(x) check.add(hsh)return res# Driver code lst = [[ 1 ], [ 1 , 2 ], [ 3 , 4 , 5 ], [ 2 , 1 ]] print (Remove(lst))

输出如下:
[[1], [1, 2], [3, 4, 5]]

【Python从给定列表中删除重复的子列表】首先, 你的面试准备可通过以下方式增强你的数据结构概念:Python DS课程。

    推荐阅读