Skip to content
Related Articles
Open in App
Not now

Related Articles

Python program to find second largest number in a list

Improve Article
Save Article
  • Difficulty Level : Easy
  • Last Updated : 01 Feb, 2023
Improve Article
Save Article

Given a list of numbers, the task is to write a Python program to find the second largest number in the given list.

Examples: 

Input: list1 = [10, 20, 4]
Output: 10

Input: list2 = [70, 11, 20, 4, 100]
Output: 70

Method 1: Sorting is an easier but less optimal method. Given below is an O(n) algorithm to do the same. 

Python3




# Python program to find second largest
# number in a list
 
# list of numbers - length of
# list should be at least 2
list1 = [10, 20, 4, 45, 99]
 
mx = max(list1[0], list1[1])
secondmax = min(list1[0], list1[1])
n = len(list1)
for i in range(2,n):
    if list1[i] > mx:
        secondmax = mx
        mx = list1[i]
    elif list1[i] > secondmax and \
        mx != list1[i]:
        secondmax = list1[i]
    elif mx == secondmax and \
        secondmax != list1[i]:
          secondmax = list1[i]
 
print("Second highest number is : ",\
      str(secondmax))


Output

Second highest number is :  45

The time complexity of this code is O(n) as it makes a single linear scan of the list to find the second largest element. The operations performed in each iteration have a constant time complexity, so the overall complexity is O(n). 
The space complexity is O(1) as the code only uses a constant amount of extra space.

Method 2: Sort the list in ascending order and print the second last element in the list.

Python3




# Python program to find largest number
# in a list
 
# List of numbers
list1 = [10, 20, 20, 4, 45, 45, 45, 99, 99]
 
# Removing duplicates from the list
list2 = list(set(list1))
 
# Sorting the  list
list2.sort()
 
# Printing the second last element
print("Second largest element is:", list2[-2])


Output

Second largest element is: 45

Method 3: By removing the max element from the list 

Python3




# Python program to find second largest number
# in a list
 
# List of numbers
list1 = [10, 20, 4, 45, 99]
 
# new_list is a set of list1
new_list = set(list1)
 
# Removing the largest element from temp list
new_list.remove(max(new_list))
 
# Elements in original list are not changed
# print(list1)
print(max(new_list))


Output

45

Method 4: Find the max list element on inputs provided by the user 

Python3




# Python program to find second largest
# number in a list
 
# creating list of integer type
list1 = [10, 20, 4, 45, 99]
 
'''
# sort the list   
list1.sort()
     
# print second maximum element
print("Second largest element is:", list1[-2])
 
'''
 
# print second maximum element using sorted() method
print("Second largest element is:", sorted(list1)[-2])


Output

Second largest element is: 45

Method 5: Traverse once to find the largest and then once again to find the second largest. 

Python3




def findLargest(arr):
    secondLargest = 0
    largest = min(arr)
 
    for i in range(len(arr)):
        if arr[i] > largest:
            secondLargest = largest
            largest = arr[i]
        else:
            secondLargest = max(secondLargest, arr[i])
 
    # Returning second largest element
    return secondLargest
 
 
# Calling above method over this array set
print(findLargest([10, 20, 4, 45, 99]))


Output

45

Method 6: Using list comprehension

Python3




def secondmax(arr):
  sublist = [x for x in arr if x < max(arr)]
  return max(sublist)
 
if __name__ == '__main__':
  arr = [10, 20, 4, 45, 99]
  print(secondmax(arr))


Output

45

Method: Using lambda function

Python3




# python code to print second largest element in list
 
lst = [10, 20, 4, 45, 99]
maximum1 = max(lst)
maximum2 = max(lst, key=lambda x: min(lst)-1 if (x == maximum1) else x)
print(maximum2)


Output

45

Method: Using enumerate function 

Python3




lst = [10, 20, 4, 45, 99]
m=max(lst)
x=[a for i,a in enumerate(lst) if a<m]
print(max(x))


Output

45

Method : 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 second largest element in a list using a heap, we can first build a max heap using the elements in the list. Then, we can remove the root element (which is the largest element in the heap) and find the new root element, which will be the second largest element in the heap.

Here is an example of how this can be done in Python:

Python3




import heapq
 
def find_second_largest(numbers):
    # Build a max heap using the elements in the list
    heap = [(-x, x) for x in numbers]
    heapq.heapify(heap)
     
    # Remove the root element (largest element)
    heapq.heappop(heap)
     
    # The new root element is the second largest element
    _, second_largest = heapq.heappop(heap)
     
    return second_largest
 
# Test the function
numbers = [10, 20, 4, 45, 99]
print(find_second_largest(numbers))  # Output: 45


Output

45

This approach has a time complexity of O(n log n) for building the heap and O(log n) for finding the second largest element, making it more efficient than the methods mentioned in the article which have a time complexity of O(n).


My Personal Notes arrow_drop_up
Related Articles

Start Your Coding Journey Now!