Sometimes, while working with Python lists, we can have a problem in which we intend to find the position of minimum element of list. This task is easy and discussed many times. But sometimes, we can have multiple minimum elements and hence multiple minimum positions. Let’s discuss a shorthand to achieve this task in this case.
Method : Using min() + enumerate() + list comprehension In this method, the combination of above functions is used to perform this particular task. This is performed in two steps. In 1st, we acquire the minimum element and then access the list using list comprehension and corresponding element using enumerate and extract every element position equal to minimum element processed in step 1.
Python3
# Python3 code to demonstrate working of # Minimum element indices # Using list comprehension + min() + enumerate() # initializing list test_list = [ 2 , 4 , 6 , 8 , 2 , 2 ] # printing list print ("The original list : " + str (test_list)) # Minimum element indices # Using list comprehension + min() + enumerate() temp = min (test_list) res = [i for i, j in enumerate (test_list) if j = = temp] # Printing result print ("The Positions of minimum element : " + str (res)) |
The original list : [2, 4, 6, 8, 2, 2] The Positions of minimum element : [0, 4, 5]
Time Complexity: O(n), where n is the number of elements in the list “test_list”.
Auxiliary Space: O(n), where n is the number of elements in the list “test_list”.
Approach : Using numpy.argmin()
Python3
import numpy as np # initializing list test_list = [ 2 , 4 , 6 , 8 , 2 , 2 ] # printing list print ( "The original list : " + str (test_list)) # Minimum element indices # Using numpy.argmin() res = np.argwhere(test_list = = np.amin(test_list)).flatten() # Printing result print ( "The Positions of minimum element : " + str (res)) #This code is contributed by Edula Vinay Kumar Reddy |
output:
The original list : [2, 4, 6, 8, 2, 2] The Positions of minimum element : [0 4 5]
Time complexity : O(n)
Auxiliary Space : O(1)
Using a dictionary to keep track of the indices of each element, then finding the minimum element and its indices:
Approach:
- Initialize an empty dictionary indices_dict.
- Loop through the indices of my_list using a for loop.
- For each index i, check if the value my_list[i] is already a key in indices_dict.
- If my_list[i] is already a key in indices_dict, append i to the value list for that key.
- If my_list[i] is not a key in indices_dict, add it as a key with its value as a list containing only i.
- Find the minimum element of my_list using the min() function and store it in min_val.
- Retrieve the indices of min_val from indices_dict and store them in min_indices.
- Print min_indices.
Python3
my_list = [ 2 , 4 , 6 , 8 , 2 , 2 ] indices_dict = {} for i in range ( len (my_list)): if my_list[i] in indices_dict: indices_dict[my_list[i]].append(i) else : indices_dict[my_list[i]] = [i] min_val = min (my_list) min_indices = indices_dict[min_val] print (min_indices) |
[0, 4, 5]
Time complexity: O(n)
Space complexity: O(n)