Python | Check if a nested list is a subset of another nested list

Given two lists list1 and list2, check if list2 is a subset of list1 and return True or False accordingly.

Examples:

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

 
Let’s discuss few appraoches to solve the problem.



Approach #1 : Naive Appraoch
Take a variable ‘exist’ which keeps track of each element, whether it is present in list1 or not. Start a loop and in each iteration ‘i’, check if ith element is present in list1. If present, set exist to True else false.

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


Output:

True

 
Approach #2 : Using Python set
Convert each sublist of both the given nested lists to tuples, because sets can’t hold lists as they rely on their elements being immutable and lists are mutable. But converting them to tuple works well. After this, simply check if set of list2 is a subset of list1 or not.

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


Output:

True

 
Approach #3 : Using all and for loop
This method uses a for loop to check if all elements(using all) belongs to list1 or not.

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


Output:

True

 
Approach #4 : Using map() and __contains__
In this approach we use Python map() using the “containment check” operator __contains__, checking whether list1 elements are contained withing list2 or not.

filter_none

edit
close

play_arrow

link
brightness_4
code

# 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))

chevron_right


Output:

True


My Personal Notes arrow_drop_up


If you like GeeksforGeeks and would like to contribute, you can also write an article using contribute.geeksforgeeks.org or mail your article to contribute@geeksforgeeks.org. See your article appearing on the GeeksforGeeks main page and help other Geeks.

Please Improve this article if you find anything incorrect by clicking on the "Improve Article" button below.