📜  Python|检查嵌套列表是否是另一个嵌套列表的子集

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

Python|检查嵌套列表是否是另一个嵌套列表的子集

给定两个列表list1list2 ,检查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