Python program to find smallest number in a list
Last Updated :
23 Jun, 2023
We are given a list of numbers and our task is to write a Python program to find the smallest number in given list. For the following program we can use various methods including the built-in min method, sorting the array and returning the last element, etc.
Example:
Input : list1 = [10, 20, 4]
Output : 4
Input : list2 = [20, 10, 20, 1, 100]
Output : 1
Sorting the list to find smallest number in a list
In Ascending order
Here writing a Python program where we are sorting the entire list and then returning the first element as it’ll be the smallest element present in the list.
Python3
list1 = [ 10 , 20 , 4 , 45 , 99 ]
list1.sort()
print ( "Smallest element is:" , list1[ 0 ])
|
Output:
smallest element is: 4
Time Complexity: O(nlogn)
Auxiliary Space: O(1)
In Descending order
Here we are sorting using the sort() function the entire list and then returning the last element as it’ll be the smallest element present in the list.
Python3
list1 = [ 10 , 20 , 4 , 45 , 99 ]
list1.sort(reverse = True )
print ( "Smallest element is:" , list1[ - 1 ])
|
Output:
smallest element is: 4
Using min() Method to find smallest number in a list
Here we are using the min Method and then returning the smallest element present in the list.
Python3
list1 = [ 10 , 20 , 1 , 45 , 99 ]
print ( "Smallest element is:" , min (list1))
|
Output:
Smallest element is: 1
Time Complexity: O(n)
Auxiliary Space: O(n), where n is length of list
Find minimum list element for a user defined list
Python3
list1 = []
num = int ( input ( "Enter number of elements in list: " ))
for i in range ( 1 , num + 1 ):
ele = int ( input ( "Enter elements: " ))
list1.append(ele)
print ( "Smallest element is:" , min (list1))
|
Output:
Enter number of elements in list: 4
Enter elements: 12
Enter elements: 19
Enter elements: 11
Enter elements: 99
Smallest element is: 11
Find the smallest element in list comparing every element
Python3
l = [ int (l) for l in input ( "List:" ).split( "," )]
print ( "The list is " ,l)
min1 = l[ 0 ]
for i in range ( len (l)):
if l[i] < min1:
min1 = l[i]
print ( "The smallest element in the list is " ,min1)
|
Input:
List: 23,-1,45,22.6,78,100,-5
Output:
The list is ['23', '-1', '45', '22.6', '78', '100','-5']
The smallest element in the list is -5
Using the lambda function to find smallest number in a list
Here we are using the lambda function to print the smallest number present in the list.
Python3
lst = [ 20 , 10 , 20 , 1 , 100 ]
print ( min (lst, key = lambda value: int (value)) )
|
Output:
1
Using the enumerate function to find smallest number in a list
Here we are iterating over the list using the enumerate() function and returning the last element.
Python3
lst = [ 20 , 10 , 20 , 1 , 100 ]
a,i = min ((a,i) for (i,a) in enumerate (lst))
print (a)
|
Output:
1
Using reduce function to find the smallest number in a list
Here we are iterating over the list using reduce() function and returning the smallest element.
Python
from functools import reduce
lst = [ 20 , 10 , 20 , 15 , 100 ]
print ( reduce ( min ,lst) )
|
Using heap:
One approach is to use a heap data structure. A heap is a complete binary tree that satisfies the heap property: the value of each node is at least as great as the values of its children. This property allows us to efficiently find the largest or smallest element in the heap in O(1) time.
To find the smallest element in a list using a heap, we can first build a min heap using the elements in the list. Then, we can simply return the root element of the heap, which will be the smallest element in the heap.
Here is an example of how this can be done in Python:
Python3
import heapq
def find_smallest(numbers):
heap = [(x, x) for x in numbers]
heapq.heapify(heap)
_, smallest = heapq.heappop(heap)
return smallest
numbers = [ 10 , 20 , 4 , 45 , 99 ]
print (find_smallest(numbers))
|
This approach has a time complexity of O(n log n) for building the heap and O(1) for finding the smallest element, making it more efficient than the methods mentioned in the article which have a time complexity of O(n).
Method: Using recursion
We can use recursive function to find the smallest number in the list.
Python3
def Findsmall(itr,ele,list1):
if itr = = len (list1):
print ( "The smallest number in the list is " ,ele)
return
if list1[itr]<ele:
ele = list1[itr]
Findsmall(itr + 1 ,ele,list1)
return
lis = [ 5 , 7 , 2 , 8 , 9 ]
ele = lis[ 0 ]
Findsmall( 0 ,ele,lis)
|
Output
The smallest number in the list is 2
Time complexity: O(n) It will perform n recursive calls so the time complexity will be O(n).
Auxiliary Space: O(n) ,It will perform n recursive calls each recursive call pushed into stack so the space complexity will be O(n)
Using numpy module:
We can use numpy module to find the smallest number in the list.
Python3
import numpy as np
lis = [ 5 , 7 , 2 , 8 , 9 ]
minimum = np. min (lis)
print ( "The smallest number in the list is" , minimum)
|
Output
The smallest number in the list is 2
Time complexity: O(n), here n is the size of the input list. This is because the numpy min function iterates over each element in the list once to find the minimum value.
Auxiliary Space: O(1), as it only requires a single variable “minimum” to store the result.
Finding the minimum element in a list that consists of duplicate elements –
We might be given a certain list in which some of the elements have been repeated. The minimum element could be one of those repeating elements, but it will be printed the same amount of time it is present in the list. How to avoid that ?
Python3
arr = [ 5 , 2 , 3 , 2 , 5 , 4 , 7 , 9 , 7 , 10 , 15 , 68 ]
set_arr = set (arr)
print ( min (set_arr))
|
Find all the positions of the minimum value in a list that consists of duplicate elements –
Here we will now see how we can print all the positions (index) of the minimum value which is present multiple times in the same list. We will use a dictionary to store all the indexes of the value and the value itself.
Python3
arr = [ 2 , 6 , 8 , 4 , 9 , 7 , 52 , 3 , 6 , 2 , 4 , 5 , 6 , 8 , 2 ]
min_val = min (arr)
values = {}
for pos,val in enumerate (arr):
if val = = min_val:
values.update({pos:val})
print (values)
|
Output
{0: 2, 9: 2, 14: 2}
The time complexity of this code is O(n), where n is the length of the input list arr. The min function takes O(n) time to find the minimum value in the list, and the subsequent loop that finds all occurrences of the minimum value also takes O(n) time.
The space complexity of this code is O(k), where k is the number of occurrences of the minimum value in the list. The values dictionary stores the positions and values of all occurrences of the minimum value, which can be at most n/2 if all elements in the list are the same (in which case the time complexity of finding the minimum value would be O(2n) = O(n)).
Please Login to comment...