In this article, we will see how can we remove an empty tuple from a given list of tuples. We will find various ways, in which we can perform this task of removing tuples using various methods and ways in Python.
Examples:
Input : tuples = [(), (‘ram’,’15’,’8′), (), (‘laxman’, ‘sita’), (‘krishna’, ‘akbar’, ’45’), (”,”),()]
Output : [(‘ram’, ’15’, ‘8’), (‘laxman’, ‘sita’), (‘krishna’, ‘akbar’, ’45’), (”, ”)]
Input : tuples = [(”,”,’8′), (), (‘0′, ’00’, ‘000’), (‘birbal’, ”, ’45’), (”), (), (”,”),()]
Output : [(”, ”, ‘8’), (‘0′, ’00’, ‘000’), (‘birbal’, ”, ’45’), (”, ”)]
Method 1: Using the concept of List Comprehension
Python3
def Remove(tuples):
tuples = [t for t in tuples if t]
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time Complexity: O(n)
Auxiliary Space: O(1)
Method 2: Using the filter() method
Using the inbuilt method filter() in Python, we can filter out the empty elements by passing the None as the parameter. This method works in both Python 2 and Python 3 and above, but the desired output is only shown in Python 2 because Python 3 returns a generator. filter() is faster than the method of list comprehension. Let’s see what happens when we run the program in Python 2.
Python
def Remove(tuples):
tuples = filter ( None , tuples)
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print Remove(tuples)
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Now let’s see what happens when we try running the program in Python 3 and above. On running the program in Python 3, as mentioned a generator is returned.
Python3
def Remove(tuples):
tuples = filter ( None , tuples)
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ', ' '), ()]
print (Remove(tuples))
|
Output
<filter object at 0x7fae9a596e90>
Method #3 : Using len() method
Python3
def Remove(tuples):
for i in tuples:
if ( len (i) = = 0 ):
tuples.remove(i)
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ', ' '), ()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time Complexity: O(n), where n is length of list
Auxiliary Space: O(1)
Method #4 : Using == operator.Check whether the tuple is equal to empty tuple() and remove if equals.
Python3
def Remove(tuples):
for i in tuples:
if (i = = ()):
tuples.remove(i)
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Method: Using enumerate function
Python3
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ', ' '), ()]
res = [t for i, t in enumerate (tuples) if t]
print (res)
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time Complexity: O(n)
Auxiliary Space: O(1)
Method: Using while and in operator
Python
def Remove(tuples):
while () in tuples:
tuples.remove(());
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Method : Using str(), len() and find() method
Python3
def Remove(tuples):
for i in tuples:
if ( str (i).find( "()" ) ! = - 1 and len ( str (i)) = = 2 ):
tuples.remove(i)
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ', ' '), ()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Method: Using lambda functions
Python3
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ', ' '), ()]
tuples = list ( filter ( lambda x: len (x) > 0 , tuples))
print (tuples)
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Method : Using list comprehension , len() method:
Python3
def remove_empty_tuples(tuples):
return [t for t in tuples if len (t) > 0 ]
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (remove_empty_tuples(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
This method uses a list comprehension to iterate over the list of tuples and check the length of each tuple. If the length is greater than 0, it is included in the new list.
Time complexity: O(n)
Auxiliary Space: O(n)
Method: Using Recursion method
Python3
def remove_empty_tuples(start,oldlist,newlist):
if start = = len (oldlist):
return newlist
if oldlist[start] = = ():
pass
else :
newlist.append(oldlist[start])
return remove_empty_tuples(start + 1 ,oldlist,newlist)
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (remove_empty_tuples( 0 ,tuples,[]))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time complexity: O(n)
Auxiliary Space: O(n)
Method 5: Using itertools.filterfalse()
The itertools module can filter out the elements from a list of tuples. The filterfalse() method in the this module provides us a way to filter out the elements from the list that are false. We can pass an empty tuple as a parameter to the method which will filter out all the empty tuples from the list.
Algorithm:
Import the itertools module
Define the Remove() function and pass tuples as a parameter.
Use the itertools.filterfalse() method to filter out all the empty tuples from the list.
Return the filtered tuples list.
Python3
import itertools
def Remove(tuples):
tuples = list (itertools.filterfalse( lambda x: x = = (), tuples))
return tuples
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
print (Remove(tuples))
|
Output
[('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time Complexity: O(n) n is length of list of tuples
Auxiliary Space: O(1)
Method 6: Using reduce():
Algorithm:
- Define a lambda function remove_empty to append the tuple to the list only if it is not empty, otherwise return the list as it is.
- Initialize the list of tuples.
- Apply reduce method to the tuples list and the lambda function remove_empty.
- The reduce method will return the list with empty tuples removed.
- Print the original list and the list after removing empty tuples.
Python3
from functools import reduce
remove_empty = lambda lst, val: lst + [val] if val ! = () else lst
tuples = [(), ( 'ram' , '15' , '8' ), (), ( 'laxman' , 'sita' ),
( 'krishna' , 'akbar' , '45' ), (' ',' '),()]
result = reduce (remove_empty, tuples, [])
print ( "The original list is : " + str (tuples))
print ( "The list after removing empty tuples : " + str (result))
|
Output
The original list is : [(), ('ram', '15', '8'), (), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', ''), ()]
The list after removing empty tuples : [('ram', '15', '8'), ('laxman', 'sita'), ('krishna', 'akbar', '45'), ('', '')]
Time Complexity:
The time complexity of the code depends on the number of tuples in the input list. The lambda function remove_empty has a constant time complexity of O(1) for checking if the tuple is empty or not, and the reduce method has a time complexity of O(n) where n is the number of tuples in the input list. Therefore, the overall time complexity of the code is O(n).
Space Complexity:
The space complexity of the code depends on the number of tuples in the input list and the number of non-empty tuples in the input list. The lambda function remove_empty will not create any new objects, and hence the space complexity will be O(1). The reduce method will create a new list object to store the non-empty tuples, and hence the space complexity will be O(m), where m is the number of non-empty tuples in the input list. Therefore, the overall space complexity of the code is O(m).
Please Login to comment...