Open In App

Python | Replace elements in second list with index of same element in first list

Given two lists of strings, where first list contains all elements of second list, the task is to replace every element in second list with index of elements in first list.

Method #1: Using Iteration 






# Python code to replace every element
# in second list with index of first element.
 
# List Initialization
Input1 = ['cut', 'god', 'pass']
Input2 = ['god', 'cut', 'cut', 'cut',
          'god', 'pass', 'cut', 'pass']
 
# List Initialization
Output = []
 
# Using iteration
for x in Input2:
    for y in Input1:
        if x == y:
            Output.append(Input1.index(y))
 
# Printing output
print("initial 2 list are")
print(Input1, "\n", Input2)
print("Second list after replacement is:", Output)

Output: 
initial 2 list are
['cut', 'god', 'pass'] 
 ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Second list after replacement is: [1, 0, 0, 0, 1, 2, 0, 2]

 

Time Complexity : O(n*m)



Auxiliary Space : O(n+m), where n is length of Input1 list and m is length of Input2 list.

  
Method #2: Using List comprehension 
 




# Python code to replace every element
# in second list with index of first element.
 
# List initialization
Input1 = ['cut', 'god', 'pass']
 
# using enumerate
temp = {y:x for x, y in enumerate(Input1)}
 
# List initialization
Input2 = ['god', 'cut', 'cut', 'cut',
          'god', 'pass', 'cut', 'pass']
 
# Using list comprehension
Output = [temp.get(elem) for elem in Input2]
 
# Printing output
print("initial 2 list are")
print(Input1, "\n", Input2)
print("Second list after replacement is:", Output)

Output: 
initial 2 list are
['cut', 'god', 'pass'] 
 ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Second list after replacement is: [1, 0, 0, 0, 1, 2, 0, 2]

 

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

  Method #3 : Using map 




# Python code to replace every element
# in second list with index of first element.
 
# List initialization
Input1 = ['cut', 'god', 'pass']
 
# List initialization
Input2 = ['god', 'cut', 'cut', 'cut',
          'god', 'pass', 'cut', 'pass']
 
elem = {k: i for i, k in enumerate(Input1)}
Output = list(map(elem.get, Input2))
 
# Printing output
print("initial 2 list are")
print(Input1, "\n", Input2)
print("Second list after replacement is:", Output)

Output: 
initial 2 list are
['cut', 'god', 'pass'] 
 ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Second list after replacement is: [1, 0, 0, 0, 1, 2, 0, 2]

 

Method #4: Using dictionary comprehension

This method uses a dictionary to store the indices of the elements in input1. It then uses a list comprehension to iterate through input2 and replace each element with its index in the dictionary. This is a simple and efficient way to solve the task.




def replace_elements(input1, input2):
  # Create a dictionary with keys from input1 and values as the indices
  dictionary = {input1[i]: i for i in range(len(input1))}
  # Use a list comprehension to replace each element in input2 with its corresponding index in the dictionary
  return [dictionary[elem] for elem in input2]
#initialization
Input1 = ['cut', 'god', 'pass']
Input2 = ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Output = replace_elements(Input1, Input2)
#printing result
print(f"Input1: {Input1}")
print(f"Input2: {Input2}")
print(f"Output: {Output}")
#This code is contributed by Edula Vinay Kumar Reddy

Output
Input1: ['cut', 'god', 'pass']
Input2: ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Output: [1, 0, 0, 0, 1, 2, 0, 2]

Time complexity: O(n) where n is the length of input2
Auxiliary Space: O(n) to store the dictionary and output list

Method #5: Using Regular expressions




import re
 
Input1 = ['cut', 'god', 'pass']
Input2 = ['god', 'cut', 'cut', 'cut',
          'god', 'pass', 'cut', 'pass']
 
# Compile a regular expression pattern to match elements in Input1
pattern = re.compile("|".join(Input1))
 
# Use the re.finditer function to find all matches in Input2
matches = [m.group() for m in re.finditer(pattern, " ".join(Input2))]
 
# Replace elements in Input2 with their indices
Output = [Input1.index(x) for x in matches]
 
# Printing output
print("initial 2 list are")
print(Input1, "\n", Input2)
print("Second list after replacement is:", Output)
#This code is contributed by Vinay Pinjala.

Output
initial 2 list are
['cut', 'god', 'pass'] 
 ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Second list after replacement is: [1, 0, 0, 0, 1, 2, 0, 2]

Time complexity: O(n)
Auxiliary Space: O(n) 

Method #6: Using enumerate() function

Use the built-in enumerate() function to iterate through the elements of Input2 along with their indices. Then, for each element in Input2, we can check if it exists in Input1 using the in operator. If it exists, we can append the index of the matching element in Input1 to the Output list.




# Python code to replace every element
# in second list with index of first element.
 
# List Initialization
Input1 = ['cut', 'god', 'pass']
Input2 = ['god', 'cut', 'cut', 'cut',
          'god', 'pass', 'cut', 'pass']
 
# List Initialization
Output = []
 
# Using enumerate() function
for i, x in enumerate(Input2):
    if x in Input1:
        Output.append(Input1.index(x))
 
# Printing output
print("initial 2 list are")
print(Input1, "\n", Input2)
print("Second list after replacement is:", Output)

Output
initial 2 list are
['cut', 'god', 'pass'] 
 ['god', 'cut', 'cut', 'cut', 'god', 'pass', 'cut', 'pass']
Second list after replacement is: [1, 0, 0, 0, 1, 2, 0, 2]

Time Complexity: O(n^2), where n is the length of Input2.
Auxiliary Space: O(1), as we are only using the Output list to store the indices.


Article Tags :