Bisect_right Function Of Bisect Module In Python

Method Name:

bisect_right

Method Signature:

bisect_right(list, newElement, lo, hi=len(list))

Parameters:

list – The already sorted list in which the insertion point is to be found, which will maintain the sorted order. If the list already contains one or more values as the new value, the insertion position is to the right of the last such occurrence.

newElement – The new element for which the insertion point is to be found.

lo - The lowest position of the search interval to be used as a heuristic. The default value is 0.

hi  - The highest position of the search interval to be used as  a heuristic. The default value is the number of elements present in the list.

 

Return Value:

Returns the insertion point of the new element that will maintain the sorted order of the Python list.

Overview:

  • The bisect_right() method returns the position on which a new element can be inserted into an already sorted Python list, while maintaining the sorted order.
  • If there are one or more elements present with the same value as the new value then the insertion point is past the right side of the last such element.
  • The position returned can be used as the first parameter to the list.insert() method of the Python list class.

Example:

# Example Python program that finds the insertion

# point for an element, in an already sorted Python list

import bisect

import heapq

 

# Class representing a share in a company.

# This specific implementation assumes there could be

# shares of various face value(In reality two face values are common)

class Share:

 

    def __init__(self, companyName, faceValue):

        self.companyName     = companyName

        self.faceValue       = faceValue

 

    def __eq__(self, share):

        return (self.companyName == share.companyName) and (self.faceValue == share.faceValue)

 

    def __lt__(self, share):

        return self.faceValue < share.faceValue

   

    def __repr__(self):

        return "1 share of %s with face value:$%.2f"%(self.companyName, self.faceValue)

 

# Create shares           

s1 = Share("Example Company", 1)

s2 = Share("Example Company", 5)

s3 = Share("Example Company", 10)

s4 = Share("Example Company", 15)

s5 = Share("Example Company", 20)

 

# A list of shares of various classes

shares = [s2, s4, s1, s3, s5]

print("List before sorting:")

print(shares)

 

# Sort the shares

heapq.heapify(shares)

sortedShares = heapq.nsmallest(len(shares), shares)

 

print("Sorted list before inserting the new element:")

for share in sortedShares:

    print(id(share))

 

# Create another share with face value of 15

s6 = Share("Example Company", 15)

 

print("Id of new element (s6):%s"%id(s6))

 

# Find the insertion point for s6

pos = bisect.bisect_right(sortedShares, s6)

 

# Insert s6 into sortedShares at the right position

sortedShares.insert(pos, s6)

 

# Print the list of shares after insertion of s6

print("Sorted list after inserting the new element:")

for share in sortedShares:

    print(id(share))

 

Output:

List before sorting:

[1 share of Example Company with face value:$5.00, 1 share of Example Company with face value:$15.00, 1 share of Example Company with face value:$1.00, 1 share of Example Company with face value:$10.00, 1 share of Example Company with face value:$20.00]

Sorted list before inserting the new element:

4320502840

4320503008

4320503120

4320503176

4320503064

Id of new element (s6):4320503232

Sorted list after inserting the new element:

4320502840

4320503008

4320503120

4320503176

4320503232

4320503064

 

 

 

 


Copyright 2022 © pythontic.com