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]]