Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
