Open In App

Python | Indices of numbers greater than K

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

Many times we might have problem in which we need to find indices rather than the actual numbers and more often, the result is conditioned. First approach coming to mind can be a simple index function and get indices greater than particular number, but this approach fails in case of duplicate numbers. Let’s discuss certain ways in which this problem can be successfully solved. 

Method #1 : Using loop This problem can easily be solved using loop with a brute force approach in which we can just check for the index as we iterate and append it in a new list as we proceed forward. 

Python3




# Python3 code to demonstrate
# index of matching element using loop
 
# initializing list
test_list = [12, 10, 18, 15, 8, 18]
 
# printing original list
print("The original list : " + str(test_list))
 
# using loop
# index of matching element
res = []
for idx in range(0, len(test_list)) :
    if test_list[idx] > 10:
        res.append(idx)
 
# print result
print("The list of indices greater than 10 : " + str(res))


Output : 

The original list : [12, 10, 18, 15, 8, 18]
The list of indices greater than 10 : [0, 2, 3, 5]

Time Complexity: O(n), where n is the length of the input list as we are iterating through the list.

Space Complexity: O(k), where k is the number of elements greater than 10 in the input list.

Method #2 : Using list comprehension + enumerate() The combination of these two function can also perform this particular task efficiently and in one line. The enumerate function is used to get element and its index simultaneously. 

Python3




# Python3 code to demonstrate
# index of matching element
# using list comprehension + enumerate()
 
# initializing list
test_list = [12, 10, 18, 15, 8, 18]
 
# printing original list
print("The original list : " + str(test_list))
 
# using list comprehension + enumerate()
# index of matching element
res = [idx for idx, val in enumerate(test_list) if val > 10]
 
# print result
print("The list of indices greater than 10 : " + str(res))


Output : 

The original list : [12, 10, 18, 15, 8, 18]
The list of indices greater than 10 : [0, 2, 3, 5]

Method #3 : Using filter + lambda

One approach to finding the indices of numbers greater than a certain value K in a list is to use the filter() function and a lambda function.

The filter() function takes a function and an iterable as arguments, and returns an iterator that generates the elements of the iterable for which the function returns True. The lambda function is used to define a small anonymous function that returns a boolean value indicating whether an element is greater than K.

Here is an example of how this can be implemented:

Python3




# initializing list
test_list = [12, 10, 18, 15, 8, 18]
 
# printing original list
print("The original list:", test_list)
 
# using filter() and lambda
# indices of numbers greater than 10
indices = list(filter(lambda x: test_list[x] > 10, range(len(test_list))))
 
# print result
print("The indices of numbers greater than 10:", indices)
#This code is contributed by Edula Vinay Kumar Reddy


Output

The original list: [12, 10, 18, 15, 8, 18]
The indices of numbers greater than 10: [0, 2, 3, 5]

The time complexity of this approach is O(n), where n is the length of the test_list, because the filter() function iterates over the elements of the list once.
The space complexity is also O(n), because the indices list is created and grows by one element for each iteration of the filter() function.

Method 4: Using the NumPy library. 

 Step-by-step appraoch:

  • Import the NumPy library.
  • Convert the given list to a NumPy array using the np.array() function.
  • Use the np.where() function to find the indices of numbers greater than 10 in the NumPy array.
  • Convert the resulting tuple of indices to a list using the tolist() method.
  • Print the final list of indices.

Python3




# importing numpy library
import numpy as np
 
# initializing list
test_list = [12, 10, 18, 15, 8, 18]
 
# printing original list
print("The original list:", test_list)
 
# using numpy and np.where()
# indices of numbers greater than 10
indices = np.where(np.array(test_list) > 10)[0].tolist()
 
# print result
print("The indices of numbers greater than 10:", indices)


OUTPUT : 
The original list: [12, 10, 18, 15, 8, 18]
The indices of numbers greater than 10: [0, 2, 3, 5]

Time complexity: O(n), where n is the length of the given list. 
Auxiliary space: O(n), as we are creating a NumPy array of size n.



Like Article
Suggest improvement
Share your thoughts in the comments

Similar Reads