Python|检查嵌套列表是否是另一个嵌套列表的子集
给定两个列表list1和list2 ,检查list2是否是list1的子集并相应地返回 True 或 False。
例子:
Input : list1 = [[2, 3, 1], [4, 5], [6, 8]]
list2 = [[4, 5], [6, 8]]
Output : True
Input : list1 = [['a', 'b'], ['e'], ['c', 'd']]
list2 = [['g']]
Output : False
让我们讨论一些解决问题的方法。
方法#1:朴素的方法
取一个变量 'exist' 来跟踪每个元素,无论它是否存在于 list1 中。开始一个循环,并在每次迭代“i”中,检查第 i个元素是否存在于 list1 中。如果存在,则将存在设置为 True,否则设置为 false。
# Python3 Program to Check is a nested
# list is a subset of another nested list
def checkSubset(list1, list2):
l1, l2 = list1[0], list2[0]
exist = True
for i in list2:
if i not in list1:
exist = False
return exist
# Driver Code
list1 = [[2, 3, 1], [4, 5], [6, 8]]
list2 = [[4, 5], [6, 8]]
print(checkSubset(list1, list2))
输出:
True
方法 #2:使用Python集
将给定嵌套列表的每个子列表都转换为元组,因为集合不能保存列表,因为它们依赖于它们的元素是不可变的并且列表是可变的。但是将它们转换为元组效果很好。在此之后,只需检查 list2 的集合是否是 list1 的子集。
# Python3 Program to Check is a nested
# list is a subset of another nested list
def checkSubset(list1, list2):
temp1 = []
temp2 = []
for i in list1:
temp1.append(tuple(i))
for i in list2:
temp2.append(tuple(i))
return set(temp2) < set(temp1)
# Driver Code
list1 = [[2, 3, 1], [4, 5], [6, 8]]
list2 = [[4, 5], [6, 8]]
print(checkSubset(list1, list2))
输出:
True
方法 #3:使用all和 for 循环
此方法使用 for 循环检查所有元素(使用all )是否属于 list1。
# Python3 Program to Check is a nested
# list is a subset of another nested list
def checkSubset(list1, list2):
return all(x in list1 for x in list2)
# Driver Code
list1 = [[2, 3, 1], [4, 5], [6, 8]]
list2 = [[4, 5], [6, 8]]
print(checkSubset(list1, list2))
输出:
True
方法 #4:使用map()
和__contains__
在这种方法中,我们使用Python map()
使用“包含检查”运算符__contains__,检查 list1 元素是否包含在 list2 中。
# Python3 Program to Check is a nested
# list is a subset of another nested list
def checkSubset(list1, list2):
return all(map(list1.__contains__, list2))
# Driver Code
list1 = [[2, 3, 1], [4, 5], [6, 8]]
list2 = [[4, 5], [6, 8]]
print(checkSubset(list1, list2))
输出:
True