Python - Remove Sublists that are Present in Another Sublist

When working with nested lists in Python, you may need to remove sublists that are contained within other sublists. This is useful for removing redundant data and cleaning up your data structures.

Understanding the Problem

Consider a list where some sublists are completely contained within other sublists ?

duplicate_list = [['Aayush', 'Shyam', 'John'], ['Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon'], ['David', 'Stefen']]
print("Original list:")
print(duplicate_list)
Original list:
[['Aayush', 'Shyam', 'John'], ['Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon'], ['David', 'Stefen']]

Here, ['Shyam', 'John'] is contained in ['Aayush', 'Shyam', 'John'], and ['David', 'Stefen'] is contained in ['David', 'Stefen', 'Damon'].

Method 1: Using List Comprehension

The most efficient approach uses list comprehension with set operations ?

duplicate_list = [['Aayush', 'Shyam', 'John'], ['Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon'], ['David', 'Stefen']]

new_list = [sublist for sublist in duplicate_list 
            if not any(set(sublist) <= set(other) 
                      for other in duplicate_list 
                      if sublist is not other)]

print("After removing sublists:")
print(new_list)
After removing sublists:
[['Aayush', 'Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon']]

Method 2: Using a Custom Function

Create a separate function for better code organization ?

def is_sublist(sublist, other):
    """Check if sublist is contained in other"""
    return set(sublist) <= set(other)

duplicate_list = [['Aayush', 'Shyam', 'John'], ['Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon'], ['David', 'Stefen']]

new_list = [sublist for sublist in duplicate_list 
            if not any(is_sublist(sublist, other) 
                      for other in duplicate_list 
                      if sublist is not other)]

print("Result:")
print(new_list)
Result:
[['Aayush', 'Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon']]

Method 3: Using Nested Loops

A more explicit approach using nested loops and the issubset() method ?

duplicate_list = [['Aayush', 'Shyam', 'John'], ['Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon'], ['David', 'Stefen']]
new_list = []

for sublist in duplicate_list:
    is_contained = False
    for other in duplicate_list:
        if sublist != other and set(sublist).issubset(set(other)):
            is_contained = True
            break
    
    if not is_contained:
        new_list.append(sublist)

print("Final result:")
print(new_list)
Final result:
[['Aayush', 'Shyam', 'John'], ['Henry', 'Joe'], ['David', 'Stefen', 'Damon']]

Comparison

Method Readability Performance Best For
List Comprehension Concise Fast Small to medium lists
Custom Function Very clear Fast Reusable code
Nested Loops Explicit Slower Complex logic needed

Conclusion

Use list comprehension with set operations for the most efficient solution. The custom function approach provides better code organization when you need to reuse the logic multiple times.

Updated on: 2026-03-27T10:42:15+05:30

288 Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements