Open In App

Python program to find second largest number in a list

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

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

Time Complexity: O(nlogn)
Auxiliary Space: O(1)

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

Time Complexity: O(n)
Auxiliary Space: O(1)

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

Time Complexity: O(NlogN) where N is the number of elements in the Array.

Auxiliary Space: O(1)

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

Time Complexity: O(N)

Auxiliary Space: O(1)

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).

Method : Using numpy.argsort() function.

note: install numpy module using command “pip install numpy”

Here’s the implementation of finding the second largest number in a list using numpy.argsort() function.

Algorithm:

Create a numpy array from the given list.
Use numpy.argsort() function to find the indices that would sort the array.
Find the second last index from the sorted indices.
Return the element at that index from the original array.

Python3




import numpy as np
 
def find_second_largest(arr):
    # creating numpy array
    np_arr = np.array(arr)
 
    # getting sorted indices
    sorted_indices = np.argsort(np_arr)
 
    # finding the second last index from sorted indices
    second_last_index = sorted_indices[-2]
 
    # returning the element at the second last index from original array
    return np_arr[second_last_index]
 
# example usage
arr = [10, 20, 4, 45, 99]
print(find_second_largest(arr)) # Output: 45


Output:

45

The time complexity of the code is O(nlogn), where n is the number of elements in the list. This is because the numpy.argsort() function has a time complexity of O(nlogn) for sorting the input list, and selecting the second largest element from the sorted list takes constant time.

The auxiliary space of the code is O(n), where n is the number of elements in the list. This is because the numpy.argsort() function creates a sorted copy of the input list and stores it in memory.

Method : Using sorted()

Algorithm :

  1. The list of integers is initialized with values [2, 1, 8, 7, 3, 0].
  2. The original list is printed using the print() function and the list variable.
  3. The sorted() function is used to sort the list in descending order, and the sorted list is assigned to a new variable named list1.
  4. The sorted list is printed using the print() function and the list1 variable.
  5. The second largest number is printed using the print() function and the index of the second largest number in the sorted list (which is 1, since list indexes start from 0).

Python3




# python program to find second largest number in the given list
# Initializing the list
list = [2, 1, 8, 7, 3, 0]
 
# printing the original list
print('The given list is:', list)
 
# using sorted()
list1 = []
list1 = sorted(list, reverse=True)
 
# list after sorting
print('The sorted list is:', list1)
 
# printing the second largest number in the list
print('The second largest number in the given list is:', list1[1])
 
# This code is contributed by SHAIK HUSNA


Output

The given list is: [2, 1, 8, 7, 3, 0]
The sorted list is: [8, 7, 3, 2, 1, 0]
The second largest number in the given list is: 7

Time Complexity : O(n log n)

Auxiliary Space : O(n)



Similar Reads

Python | Largest, Smallest, Second Largest, Second Smallest in a List
Since, unlike other programming languages, Python does not have arrays, instead, it has list. Using lists is more easy and comfortable to work with in comparison to arrays. Moreover, the vast inbuilt functions of Python, make the task easier. So using these techniques, let's try to find the various ranges of the number in a given list. Examples: In
5 min read
Get Second Largest Number in Python List Using Bubble Sort
Finding the second-largest number in a list is a common programming task that involves sorting the list in ascending order. Bubble sort is a simple sorting algorithm that can be used for this purpose. In this article, we will explore the logic behind finding the second largest number using bubble sort and provide a Python program to implement it. M
3 min read
Python Program to Print Largest Even and Largest Odd Number in a List
Auxiliary Given a list. The task is to print the largest even and largest odd number in a list. Examples: Input: 1 3 5 8 6 10 Output: Largest even number is 10 Largest odd number is 5 Input: 123 234 236 694 809 Output: Largest odd number is 809 Largest even number is 694 The first approach uses two methods , one for computing largest even number an
7 min read
Python Program to Find Largest Number in a List
Given a list of numbers, the task is to write a Python program to find the largest number in given list. Examples: Input : list1 = [10, 20, 4]Output : 20Find Largest Number in a List with Native ExampleSort the list in ascending order and print the last element in the list. C/C++ Code # Python program to find largest # number in a list # list of nu
5 min read
Second largest value in a Python Dictionary
In this problem, we will find the second-largest value in the given dictionary. Examples: Input : {'one':5, 'two':1, 'three':6, 'four':10} Output : Second largest value of the dictionary is 6 Input : {1: 'Geeks', 'name': 'For', 3: 'Geeks'} Output : Second largest value of the dictionary is Geeks C/C++ Code dictionary = {1: 'Geeks', 'name': 'For', 3
2 min read
Sort the values of first list using second list in Python
Given two lists, sort the values of one list using the second list. Examples: Input : list1 = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] list2 = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]Output : ['a', 'd', 'h', 'b', 'c', 'e', 'i', 'f', 'g'] Input : list1 = ["g", "e", "e", "k", "s", "f", "o", "r", "g", "e", "e", "k", "s"] list2 = [ 0, 1, 1, 0, 1, 2, 2, 0, 1]O
6 min read
Python | Replace elements in second list with index of same element in first list
Given two lists of strings, where first list contains all elements of second list, the task is to replace every element in second list with index of elements in first list. Method #1: Using Iteration C/C++ Code # Python code to replace every element # in second list with index of first element. # List Initialization Input1 = ['cut', 'god', 'pass']
5 min read
Python - Filter the List of String whose index in second List contains the given Substring
Given two lists, extract all elements from the first list, whose corresponding index in the second list contains the required substring. Examples: Input : test_list1 = ["Gfg", "is", "not", "best", "and", "not", "CS"], test_list2 = ["Its ok", "all ok", "wrong", "looks ok", "ok", "wrong", "thats ok"], sub_str = "ok" Output : ['Gfg', 'is', 'best', 'an
10 min read
Python program to sort a list of tuples by second Item
Given a list of tuples, write a Python program to sort the tuples by the second item of each tuple. Examples: Input : [('for', 24), ('Geeks', 8), ('Geeks', 30)] Output : [('Geeks', 8), ('for', 24), ('Geeks', 30)] Input : [('452', 10), ('256', 5), ('100', 20), ('135', 15)] Output : [('256', 5), ('452', 10), ('135', 15), ('100', 20)] Method #1: Using
6 min read
Python - Find first element by second in tuple List
Sometimes, while working with Python records, we can have a problem in which we need to find the first element of tuple from the given second element. This kind of problem can occur in domains such as web development. Let's discuss certain ways in which this task can be performed. Input : test_list = [(4, 5), (5, 6), (1, 3), (6, 6)] K = 6 Output :
4 min read