Open In App

Python | Replace tuple according to Nth tuple element

Sometimes, while working with data, we might have a problem in which we need to replace the entry in which a particular entry of data is matching. This can be a matching phone no, id etc. This has it’s application in web development domain. Let’s discuss certain ways in which this task can be performed. 

Method #1: Using loop + enumerate() This task can be performed using the combination of loops and enumerate function which can help to access the Nth element and then check and replace when the condition is satisfied. 






# Python3 code to demonstrate working of
# Replace tuple according to Nth tuple element
# Using loops + enumerate()
 
# Initializing list
test_list = [('gfg', 1), ('was', 2), ('best', 3)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Initializing change record
repl_rec = ('is', 2)
 
# Initializing N
N = 1
 
# Replace tuple according to Nth tuple element
# Using loops + enumerate()
for key, val in enumerate(test_list):
    if val[N] == repl_rec[N]:
        test_list[key] = repl_rec
        break
 
# printing result
print("The tuple after replacement is : " + str(test_list))

Output
The original list is : [('gfg', 1), ('was', 2), ('best', 3)]
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time Complexity: O(n)
Auxiliary Space: O(1)



Method #2: Using list comprehension This is the one-liner approach to solve this particular problem. In this, we just iterate the list element and keep matching the matching Nth element of tuple and perform replacement. 




# Python3 code to demonstrate working of
# Replace tuple according to Nth tuple element
# Using list comprehension
 
# Initializing list
test_list = [('gfg', 1), ('was', 2), ('best', 3)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Initializing change record
repl_rec = ('is', 2)
 
# Initializing N
N = 1
 
# Replace tuple according to Nth tuple element
# Using list comprehension
res = [repl_rec if sub[N] == repl_rec[N] else sub for sub in test_list]
 
# printing result
print("The tuple after replacement is : " + str(res))

Output
The original list is : [('gfg', 1), ('was', 2), ('best', 3)]
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), where n is the length of the input list.
Auxiliary space: O(n), as we are creating a new list to store the result.

Method #3 : Using the map() function

This method uses the map() function to check and replace the element that matches the condition.




# Python3 code to demonstrate working of
# Replace tuple according to Nth tuple element
# Using map()
 
# Initializing list
test_list = [('gfg', 1), ('was', 2), ('best', 3)]
 
# printing original list
print("The original list is : " + str(test_list))
 
# Initializing change record
repl_rec = ('is', 2)
 
# Initializing N
N = 1
 
# Replace tuple according to Nth tuple element
# Using map()
res = list(map(lambda x: repl_rec if x[N] == repl_rec[N] else x, test_list))
 
# printing result
print("The tuple after replacement is : " + str(res))
 
# Output:
# The original list is : [('gfg', 1), ('was', 2), ('best', 3)]
# The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]
#This code is contributed by Edula Vinay Kumar Reddy

Output
The original list is : [('gfg', 1), ('was', 2), ('best', 3)]
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), as it iterates through the list of tuples once.
Auxiliary space: O(n) as it creates a new list to store the modified tuples, the size of this list is equal to the size of the original list.

Method #4:  Use the filter() function along with a lambda function 

The filter() function is used to remove the tuples from test_list that don’t match the value of the Nth element in repl_rec. The resulting map object is converted to a list using the list() function. Then, the repl_rec tuple is added to the list using the concatenation operator +. The resulting list contains the tuples with the replaced value.




test_list = [('gfg', 1), ('was', 2), ('best', 3)] # initializing list
repl_rec = ('is', 2) # initializing change record
N = 1 # initializing N
 
# using filter function with lambda to remove tuples that don't match value of Nth element, and then adding repl_rec tuple to the list
test_list = list(filter(lambda x: x[N] != repl_rec[N], test_list)) + [repl_rec]
 
print("The tuple after replacement is : " + str(test_list)) # printing result

Output
The tuple after replacement is : [('gfg', 1), ('best', 3), ('is', 2)]

Time complexity: O(n), where n is the number of tuples in the list.
Auxiliary space: O(n), where n is the number of tuples in the list.

Method #5: Using a simple loop.




test_list = [('gfg', 1), ('was', 2), ('best', 3)]
repl_rec = ('is', 2)
N = 1
 
# Create an empty list to store the updated tuples
res = []
 
# Iterate over each tuple in the original list
for x in test_list:
    # Check if the Nth element of the tuple matches the Nth element of the replacement tuple
    if x[N] == repl_rec[N]:
        # If it matches, add the replacement tuple to the result list
        res.append(repl_rec)
    else:
        # If it doesn't match, add the original tuple to the result list
        res.append(x)
 
# Print the updated list of tuples
print("The tuple after replacement is : " + str(res))

Output
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), where n is the number of tuples in the list.
Auxiliary space: O(n), where n is the number of tuples in the list.

Method #6: Using itertools.starmap().

Step-by-step approach:

  1. Initialize the list of tuples and the replacement tuple.
  2. Use itertools.starmap() method to iterate over each tuple in the original list.
  3. Use lambda function to check if the Nth element of the current tuple is equal to the Nth element of the replacement tuple.
  4. If the elements are equal, return the replacement tuple, else return the current tuple.
  5. Convert the iterator returned by starmap() to a list and store it in res.
  6. Print the updated list of tuples.




import itertools
 
# Initializing list
test_list = [('gfg', 1), ('was', 2), ('best', 3)]
  
# printing original list
print("The original list is : " + str(test_list))
  
# Initializing change record
repl_rec = ('is', 2)
  
# Initializing N
N = 1
 
res = list(itertools.starmap(lambda *x: repl_rec if x[N] == repl_rec[N] else x, test_list))
 
 
# printing result
print("The tuple after replacement is : " + str(res))

Output
The original list is : [('gfg', 1), ('was', 2), ('best', 3)]
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time Complexity: O(n), The time complexity of the lambda function and the starmap() method is O(1) as they execute for each tuple in the list. Therefore, the overall time complexity is O(n), where n is the number of tuples in the list.
Auxiliary Space: O(n) as we create a new list to store the updated tuples.

Method #7: Using reduce() function from functools module




import functools
 
test_list = [('gfg', 1), ('was', 2), ('best', 3)]
repl_rec = ('is', 2)
N = 1
 
# Define a lambda function to update the list of tuples
update_list = lambda res, x: res + [repl_rec] if x[N] == repl_rec[N] else res + [x]
 
# Use reduce() function with lambda function and initial value of an empty list to update the list of tuples
res = functools.reduce(update_list, test_list, [])
 
# Print the updated list of tuples
print("The tuple after replacement is : " + str(res))

Output
The tuple after replacement is : [('gfg', 1), ('is', 2), ('best', 3)]

Time complexity: O(n), where n is the length of the input list.
Auxiliary space: O(n), where n is the length of the input list.


Article Tags :