Given two list, If element in first list in greater than element in second list, then subtract it, else return the element of first list only.
Examples:
Input:
l1 = [10, 20, 30, 40, 50, 60]
l2 = [60, 50, 40, 30, 20, 10]
Output:
[10, 20, 30, 10, 30, 50]
Input:
l1 = [15, 9, 10, 56, 23, 78, 5, 4, 9]
l2 = [9, 4, 5, 36, 47, 26, 10, 45, 87]
Output:
[6, 5, 5, 20, 23, 52, 5, 4, 9]
Method 1: The naive approach is to traverse both list simultaneously and if the element in first list in greater than element in second list, then subtract it, else if the element in first list in smaller than element in second list, then return element of first list only.
Python3
Input1 = [ 10 , 20 , 30 , 40 , 50 , 60 ]
Input2 = [ 60 , 50 , 40 , 30 , 20 , 10 ]
Output = []
for i in range ( len (Input1)):
if Input1[i] > Input2[i]:
Output.append(Input1[i] - Input2[i])
else :
Output.append(Input1[i])
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output:
Original list are :
[10, 20, 30, 40, 50, 60]
[60, 50, 40, 30, 20, 10]
Output list is
[10, 20, 30, 10, 30, 50]
Time Complexity: O(n*n) where n is the number of elements in the list.
Auxiliary Space: O(n) constant additional spaceof size n is created
Method 2: Using zip() we subtract if element in first list is greater than element in second list, else we output element of first list.
Python3
Input1 = [ 10 , 20 , 30 , 40 , 50 , 60 ]
Input2 = [ 60 , 50 , 40 , 30 , 20 , 10 ]
Output = [e1 - e2 if e1>e2 else e1 for (e1, e2) in zip (Input1, Input2)]
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output:
Original list are :
[10, 20, 30, 40, 50, 60]
[60, 50, 40, 30, 20, 10]
Output list is
[10, 20, 30, 10, 30, 50]
Time Complexity: O(n*n) where n is the number of elements in the list.
Auxiliary Space: O(n) constant additional spaceof size n is created
Method 3: Using list comprehension
Python3
Input1 = [ 10 , 20 , 30 , 40 , 50 , 60 ]
Input2 = [ 60 , 50 , 40 , 30 , 20 , 10 ]
Output = [Input1[i] - Input2[i] if Input1[i] > Input2[i] \
else Input1[i] for i in range ( len (Input1))]
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output:
Original list are :
[10, 20, 30, 40, 50, 60]
[60, 50, 40, 30, 20, 10]
Output list is
[10, 20, 30, 10, 30, 50]
Time complexity: O(n*n), where n is the length of the numbers list. The list comprehension has a time complexity of O(n)
Auxiliary Space: O(n), where n is the length of the numbers list.
Method 4: Using numpy() to complete the above task.
Python3
import numpy as np
Input1 = np.array([ 10 , 20 , 30 , 40 , 50 , 60 ])
Input2 = np.array([ 60 , 50 , 40 , 30 , 20 , 10 ])
Output = np.where(Input1 > = Input2, Input1 - Input2, Input1)
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output:
Original list are :
[10 20 30 40 50 60]
[60 50 40 30 20 10]
Output list is
[10 20 30 10 30 50]
Method 5: Using map() and lambda function
Python3
Input1 = [ 10 , 20 , 30 , 40 , 50 , 60 ]
Input2 = [ 60 , 50 , 40 , 30 , 20 , 10 ]
Output = list ( map ( lambda x, y: x - y if x > y else x, Input1, Input2))
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output
Original list are :
[10, 20, 30, 40, 50, 60]
[60, 50, 40, 30, 20, 10]
Output list is
[10, 20, 30, 10, 30, 50]
The time complexity is O(n) where n is the number of elements in the input lists, since we are iterating over the elements of the lists once. The space complexity is O(n) as well, since we are creating a new list of the same size as the original lists.
Method 6: Using Pandas
Python3
import pandas as pd
import numpy as np
Input1 = [ 10 , 20 , 30 , 40 , 50 , 60 ]
Input2 = [ 60 , 50 , 40 , 30 , 20 , 10 ]
df = pd.DataFrame({ "Input1" : Input1, "Input2" : Input2})
df[ "Output" ] = np.where(df[ "Input1" ] > df[ "Input2" ], df[ "Input1" ] - df[ "Input2" ], df[ "Input1" ])
Output = df[ "Output" ].tolist()
print ( "Original list are :" )
print (Input1)
print (Input2)
print ( "\nOutput list is" )
print (Output)
|
Output:
Original list are :
[10, 20, 30, 40, 50, 60]
[60, 50, 40, 30, 20, 10]
Output list is
[10, 20, 30, 10, 30, 50]
Time Complexity: O(n)
Auxiliary Space: O(n)
Last Updated :
17 Apr, 2023
Like Article
Save Article
Share your thoughts in the comments
Please Login to comment...