Given a list of tuples, Write a Python program to remove all the duplicated tuples from the given list.
Examples:
Input : [(1, 2), (5, 7), (3, 6), (1, 2)] Output : [(1, 2), (5, 7), (3, 6)] Input : [('a', 'z'), ('a', 'x'), ('z', 'x'), ('a', 'x'), ('z', 'x')] Output : [('a', 'z'), ('a', 'x'), ('z', 'x')]
Method #1 : List comprehension This is a naive approach to use list comprehension. Here, we use two for loops and set data structure to cancel out all the duplicates.
# Python3 program to remove duplicate # tuples from list of tuples def removeDuplicates(lst):
return [t for t in ( set ( tuple (i) for i in lst))]
# Driver code lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (removeDuplicates(lst))
|
[(1, 2), (5, 7), (3, 6)]
Time complexity: O(n*logn), where n is the length of the input list.
Auxiliary space: O(n), where n is the length of the input list.
Method #2 : List comprehension (Efficient approach) This method is efficient as compared to the above method, here we use a single for loop within list comprehension and then convert it to set to remove duplicates and then again convert it to list.
# Python3 program to remove duplicate # tuples from list of tuples def removeDuplicates(lst):
return list ( set ([i for i in lst]))
# Driver code lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (removeDuplicates(lst))
|
[(1, 2), (5, 7), (3, 6)]
Time complexity: O(n) where n is the number of tuples in the list.
Auxiliary space: O(n).
Method #3 : Python enumerate() method
# Python3 program to remove duplicate # tuples from list of tuples def removeDuplicates(lst):
return [[a, b] for i, [a, b] in enumerate (lst)
if not any (c = = b for _, c in lst[:i])]
# Driver code lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (removeDuplicates(lst))
|
[[1, 2], [5, 7], [3, 6]]
Time complexity: O(n^2), where n is the length of the input list.
Auxiliary space: O(n^2).
Method #4: Using a dictionary
This method involves creating a dictionary where the keys are the tuples, and the values are a boolean indicating whether the tuple has been encountered before. We can then iterate through the list and add the tuples to the result list if they have not been encountered before.
def remove_duplicates(lst):
# Create an empty dictionary to store tuples as keys
encountered = {}
# Create an empty list to store unique tuples
result = []
# Iterate through the input list
for tup in lst:
# If the tuple has not been encountered before,
# add it to the dictionary and the result list
if tup not in encountered:
encountered[tup] = True
result.append(tup)
# Return the list of unique tuples
return result
#Driver code lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (remove_duplicates(lst))
#This code is contributed by Edula Vinay Kumar Reddy |
[(1, 2), (5, 7), (3, 6)]
Time complexity: O(n), where n is the number of tuples in the list.
Auxiliary Space: O(n), as we are creating a dictionary with n keys.
Method #5: Using recursive function.
#defining a recursive function to remove duplicate tuple in a list def remove_duplicate(start,oldlist,newlist):
if start = = len (oldlist): return newlist #base condition
if oldlist[start] not in newlist: #checking whether element present in new list or not
newlist.append(oldlist[start])
return remove_duplicate(start + 1 ,oldlist,newlist) #recursive call
#driver code lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )] #Initaizing tuples in a list
res = remove_duplicate( 0 ,lst,[]) #calling recursive function with correct parameters
print (res) #printing result
|
[(1, 2), (5, 7), (3, 6)]
Time complexity: O(n), where n is the number of tuples in the list.
Auxiliary Space: O(n), as we are creating a n function call.
Method #6:Using the dict.fromkeys
def removeDuplicates(lst):
# Convert the list of tuples to a dictionary using dict.fromkeys
# This automatically removes duplicates because dict keys must be unique
dict_without_duplicates = dict .fromkeys(lst)
# Return the list of keys from the dictionary, which will be the original tuples
return list (dict_without_duplicates.keys())
# Example usage lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (removeDuplicates(lst))
#This code is contributed by Vinay Pinjala. |
[(1, 2), (5, 7), (3, 6)]
Time complexity: O(n)
Auxiliary Space: O(n)
Method #7: Using the itertools library
The itertools library provides a function called “groupby” that can be used to group similar items together. We can use this function to group the tuples by their elements, which effectively removes duplicates.
import itertools
def removeDuplicates(lst):
# Sort the list of tuples to ensure duplicates are grouped together
lst.sort()
# Use itertools.groupby to group the tuples by their elements
# This effectively removes duplicates
grouped = itertools.groupby(lst)
# Convert the grouped object back to a list of tuples
# We only need the keys (tuples) since the values are just placeholders
unique = [key for key,_ in grouped]
return unique
# Example usage lst = [( 1 , 2 ), ( 5 , 7 ), ( 3 , 6 ), ( 1 , 2 )]
print (removeDuplicates(lst))
|
[(1, 2), (3, 6), (5, 7)]
Time complexity: O(n log n), where n is the length of the input list.
Auxiliary space: O(n), where n is the length of the input list.