
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Program to return number of smaller elements at right of the given list in Python
In Python, a list is a ordered and mutable data structure where elements are enclosed in square braces []. In some scenarios, we may need to count how many elements to the right of each element in the list are smaller than it.
Using Binary Search with bisect_left() Function
The bisect_left() Function of the bisect method is used locate the insertion point for an element in a sorted list to maintain the list's sorted order. The insertion point returned by bisect_left() is the index where the element can be inserted without violating the sort order by placing it before any existing entries with the same value.
Example-1
Following is the example in which we go through the input list from right to left by using the bisect_left() function to insert elements into a sorted list by tracking the position of insertion, which represents the count of smaller elements -
import bisect def count_smaller_elements(arr): result = [] sorted_list = [] for num in reversed(arr): index = bisect.bisect_left(sorted_list, num) result.append(index) bisect.insort(sorted_list, num) return result[::-1] # Sample input list numbers = [5, 2, 6, 1] print("Count of smaller elements to the right:", count_smaller_elements(numbers))
Here is the output of the above example -
Count of smaller elements to the right: [2, 1, 1, 0]
Example-2
Here is another example to return number of smaller elements at right of the given list in python using the bisect_left() function of the bisect module -
import bisect class Solution: def solve(self, nums): res, inc = [], [] while nums: num = nums.pop() res.append(bisect.bisect_left(inc, num)) bisect.insort(inc, num) return res[::-1] ob = Solution() nums = [4, 5, 9, 7, 2] print(ob.solve(nums))
Below is the output of the above example -
[1, 1, 2, 1, 0]