Python program to return rows that have element at a specified index

Given two Matrices, the task is to write a Python program that can extract all the rows from both matrices which have similar elements at their Kth index, mapped at similar row positions.
Examples:
Input : test_list1 = [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]],
test_list2 = [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]],
K = 1
Output : [[9, 2, 0], [8, 2, 3], [6, 4, 4], [5, 4, 6], [6, 4, 4], [5, 4, 6]]
Explanation : All elements with similar elements at 1st index extracted.
Input : test_list1 = [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 5, 4]],
test_list2 = [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]],
K = 1
Output : [[9, 2, 0], [8, 2, 3], [6, 4, 4], [5, 4, 6]]
Explanation : All elements with similar elements at 1st index extracted.
Method 1: Using loop and enumerate()
In this, the list is iterated from the start row till the end, and each row’s Kth index is matched, if found, both rows are appended to the result.
Example:
Python3
# Initializing liststest_list1 = [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]]test_list2 = [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]]# Printing original listsprint("The original list 1 is : " + str(test_list1))print("The original list 2 is : " + str(test_list2))# Initializing KK = 1# Empty listres = []for idx in range(len(test_list1)): # Comparinging lists if test_list1[idx][K] == test_list2[idx][K]: res.append(test_list1[idx]) res.append(test_list2[idx])# Printing resultprint("K index matching rows : " + str(res)) |
The original list 1 is : [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]] The original list 2 is : [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]] K index matching rows : [[9, 2, 0], [8, 2, 3], [6, 4, 4], [5, 4, 6], [6, 4, 4], [5, 4, 6]]
Time Complexity: O(n*m)
Auxiliary Space: O(k)
Method 2: Using list comprehension and zip()
In this, we perform the task of getting pairing using zip() and then compare the Kth element, append, and iterate using extend() and list comprehension.
Example:
Python3
# Initializing liststest_list1 = [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]]test_list2 = [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]]# Printing original listsprint("The original list 1 is : " + str(test_list1))print("The original list 2 is : " + str(test_list2))# Initializing KK = 1# zip() combines elements togetherres = [][res.extend([t1, t2]) for t1, t2 in zip(test_list1, test_list2) if t1[K] == t2[K]]# Printing resultprint("K index matching rows : " + str(res)) |
The original list 1 is : [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]] The original list 2 is : [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]] K index matching rows : [[9, 2, 0], [8, 2, 3], [6, 4, 4], [5, 4, 6], [6, 4, 4], [5, 4, 6]]
Time Complexity: O(n*n) where n is the number of elements in the list “test_list”. The list comprehension and zip() are used to perform the task and it takes O(n*n) time.
Auxiliary Space: O(n), new list of size O(n) is created where n is the number of elements in the list.
Method 3: Using the NumPy module
Steps:
- Import the numpy module.
- Convert the input lists to numpy arrays.
- Get the Kth column of each array using array slicing.
- Compare the Kth columns of the arrays using the “==” operator to get a boolean array.
- Use the boolean array to index the original arrays to get the matching rows.
- Combine the matching rows from both arrays using NumPy’s “column_stack” function.
- Convert the combined array back to a list of lists.
Python3
import numpy as np# initializing liststest_list1 = [[1, 8, 3], [9, 2, 0], [6, 4, 4], [6, 4, 4]]test_list2 = [[1, 9, 3], [8, 2, 3], [5, 4, 6], [5, 4, 6]]# convert lists to numpy arraysarr1 = np.array(test_list1)arr2 = np.array(test_list2)# get Kth column of each arrayk_col1 = arr1[:, 1]k_col2 = arr2[:, 1]# compare Kth columns of arrays to get boolean arraybool_arr = k_col1 == k_col2# use boolean array to index original arrays to get matching rowsmatching_arr1 = arr1[bool_arr]matching_arr2 = arr2[bool_arr]# combine matching rows from both arrays using vstack functioncombined_arr = np.vstack((matching_arr1, matching_arr2))# convert combined array back to list of listsres = combined_arr.tolist()# printing resultprint("K index matching rows : " + str(res)) |
Output:
K index matching rows : [[9, 2, 0], [6, 4, 4], [6, 4, 4], [8, 2, 3], [5, 4, 6], [5, 4, 6]]
Time complexity: O(N), where N is the number of elements in the lists.
Auxiliary space: O(N) as well, since the arrays and the combined array both require N elements of memory.



