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

📅  最后修改于: 2022-05-13 01:55:02.157000             🧑  作者: Mango

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:集合理解+拆包

我们的第一种方法是使用带有排序元组的集合理解。在列表的每次迭代中,我们将当前子列表转换为排序的元组,并返回所有这些元组的集合,这反过来又消除了所有重复出现的子列表,从而删除了所有重复的重新排列的子列表。

# Python3 program to Remove repeated 
# unordered sublists from list
  
def 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:使用带有集合排序元组的map()

# Python3 program to Remove repeated 
# unordered sublists from list
  
def 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 是否存在于 check 中。如果不是,则将当前子列表附加到“.res”,将“hsh”附加到“检查”。这样,维护子列表的顺序会更容易。

# Python3 program to Remove repeated 
# unordered sublists from list
  
def 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]]