Open In App

Python – Rows with K string in Matrix

Last Updated : 14 May, 2023
Improve
Improve
Like Article
Like
Save
Share
Report

Given a matrix, extract row numbers with particular string occurrences.

Input : test_list = [[“GFG”, “best”, “geeks”], [“geeks”, “rock”], [“GFG”, “for”, “CS”], [“Keep”, “learning”]], K = “GFG” 
Output : [0, 2] 
Explanation : 0th index and 2nd index have “GFG” in them as element.

Input : test_list = [[“GFG”, “best”, “geeks”], [“geeks”, “rock”, “GFG”], [“GFG”, “for”, “CS”], [“Keep”, “learning”]], K = “GFG” 
Output : [0, 1, 2] 
Explanation : 0th index, 1st index and 2nd index have “GFG” in them as element. 

Method #1: Using loop

In this, we iterate for each element in Matrix and get the indices of all the rows which match the K string.

Python3




# Python3 code to demonstrate working of
# Rows with K string in Matrix
# Using loop
 
# initializing list
test_list = [["GFG", "best", "geeks"], ["geeks", "rock"],
             ["GFG", "for", "CS"], ["Keep", "learning"]]
 
# printing original list
print("The original list is : ", test_list)
 
# initializing K
K = "GFG"
 
res = []
 
# enumerate() used for getting both index and ele
for idx, ele in enumerate(test_list):
 
    # checking for K String
    if K in ele:
        res.append(idx)
 
# printing result
print("Rows with K : " + str(res))


Output:

The original list is :  [[‘GFG’, ‘best’, ‘geeks’], [‘geeks’, ‘rock’], [‘GFG’, ‘for’, ‘CS’], [‘Keep’, ‘learning’]] Rows with K : [0, 2]

Time Complexity: O(n) where n is the number of elements in the list “test_list”. 
Auxiliary Space: O(n) additional space of size n is created where n is the number of elements in the list “test_list”. 

Method #2 : Using list comprehension

This is similar to above method, difference being its a shorthand to solve problem.

Python3




# Python3 code to demonstrate working of
# Rows with K string in Matrix
# Using list comprehension
 
# initializing list
test_list = [["GFG", "best", "geeks"], ["geeks", "rock"],
             ["GFG", "for", "CS"], ["Keep", "learning"]]
 
# printing original list
print("The original list is : ", test_list)
 
# initializing K
K = "GFG"
 
# shorthand to get result
res = [idx for idx, ele in enumerate(test_list) if K in ele]
 
# printing result
print("Rows with K : " + str(res))


Output:

The original list is :  [[‘GFG’, ‘best’, ‘geeks’], [‘geeks’, ‘rock’], [‘GFG’, ‘for’, ‘CS’], [‘Keep’, ‘learning’]] Rows with K : [0, 2]

The Time and Space Complexity for all the methods are the same:

Time Complexity: O(n)

Space Complexity: O(n)

Method #3 : Using filter()

Here’s another approach using the filter() function in Python:

Algorithm for implementing Python – Rows with K string in Matrix approach:

Initialize the matrix with the given input values.
Initialize the string K with the given input value.
Use the filter function to filter out the rows in the matrix which contains the string K.
The filter function takes a lambda function which returns True if K is present in the current row being checked.
Use the range function to generate the indices of the rows in the matrix.
Convert the filtered result to a list and store it in a variable res.
Print the list of rows that contain the string K.

Python3




# Python code to find the rows with the K string in a matrix
 
# Initializing the matrix
test_list = [["GFG", "best", "geeks"], ["geeks", "rock"],
             ["GFG", "for", "CS"], ["Keep", "learning"]]
 
# Printing the original list
print("The original list is : ", test_list)
 
# Initializing K
K = "GFG"
 
# Using the filter function to get the indices of rows with K string
res = list(filter(lambda i: K in test_list[i], range(len(test_list))))
 
# Printing the result
print("Rows with K : " + str(res))


Output

The original list is :  [['GFG', 'best', 'geeks'], ['geeks', 'rock'], ['GFG', 'for', 'CS'], ['Keep', 'learning']]
Rows with K : [0, 2]

Time complexity: The time complexity of the given algorithm is O(nm), where n is the number of rows in the matrix and m is the maximum number of strings in any row. This is because we need to iterate over all the rows and check each row for the presence of the string K. The time complexity of the filter function is O(n), where n is the number of rows in the matrix.

space complexity: The space complexity of the given algorithm is O(n). This is because we are storing the result.

Method #4: Using numpy library

STEPS : 

Import the numpy library.
Initialize the matrix and K string as given in the problem.
Convert the matrix to a numpy array.
Use the np.where() function to find the indices of rows containing the K string.
Print the result.

Python3




import numpy as np
 
# Initializing the matrix and K string
test_list = [["GFG", "best", "geeks"], ["geeks", "rock"],
             ["GFG", "for", "CS"], ["Keep", "learning"]]
K = "GFG"
 
# Padding the rows with empty strings
max_len = max(len(row) for row in test_list)
padded_list = [row + ['']*(max_len-len(row)) for row in test_list]
 
# Converting matrix to numpy array
arr = np.array(padded_list)
 
# Using np.char.count() to find rows containing K string
res = np.where(np.char.count(arr, K) > 0)[0]
 
# Printing the result
print("Rows with K : " + str(res))


OUTPUT : 
Rows with K : [0 2]

Time complexity: O(n*m) where n is the number of rows and m is the maximum number of columns in a row.

Auxiliary space: O(n*m) where n is the number of rows and m is the maximum number of columns in a row, due to the creation of the numpy array.

Method #5: Using list indexing and iteration

Initialize an empty list to store the indices of the rows with the K string.
Iterate over each row of the matrix using a for loop and index variable i.
Check if K is present in the current row using the “in” keyword.
If K is present in the current row, append the index i to the list of indices.
Return the list of indices.

Python3




# Initializing the matrix
test_list = [["GFG", "best", "geeks"], ["geeks", "rock"],
             ["GFG", "for", "CS"], ["Keep", "learning"]]
 
# Printing the original list
print("The original list is : ", test_list)
 
# Initializing K
K = "GFG"
 
# Using list indexing and iteration to get the indices of rows with K string
res = []
for i in range(len(test_list)):
    if K in test_list[i]:
        res.append(i)
 
# Printing the result
print("Rows with K : " + str(res))


Output

The original list is :  [['GFG', 'best', 'geeks'], ['geeks', 'rock'], ['GFG', 'for', 'CS'], ['Keep', 'learning']]
Rows with K : [0, 2]

Time complexity: O(n*m), where n is the number of rows and m is the average number of elements in each row.
Auxiliary space: O(k), where k is the number of rows with K string.



Like Article
Suggest improvement
Previous
Next
Share your thoughts in the comments

Similar Reads