Related Articles

# Binary Search (bisect) in Python

• Difficulty Level : Basic
• Last Updated : 30 Dec, 2020

Binary Search is a technique used to search element in a sorted list. In this article, we will looking at library functions to do Binary Search.

Finding first occurrence of an element.

bisect.bisect_left(a, x, lo=0, hi=len(a)) : Returns leftmost insertion point of x in a sorted list. Last two parameters are optional, they are used to search in sublist.

 `# Python code to demonstrate working``# of binary search in library``from` `bisect ``import` `bisect_left`` ` `def` `BinarySearch(a, x):``    ``i ``=` `bisect_left(a, x)``    ``if` `i !``=` `len``(a) ``and` `a[i] ``=``=` `x:``        ``return` `i``    ``else``:``        ``return` `-``1`` ` `a  ``=` `[``1``, ``2``, ``4``, ``4``, ``8``]``x ``=` `int``(``4``)``res ``=` `BinarySearch(a, x)``if` `res ``=``=` `-``1``:``    ``print``(x, ``"is absent"``)``else``:``    ``print``(``"First occurrence of"``, x, ``"is present at"``, res)`
Output:
```First occurrence of 4 is present at 2
```

Finding greatest value smaller than x.

 `# Python code to demonstrate working``# of binary search in library``from` `bisect ``import` `bisect_left`` ` `def` `BinarySearch(a, x):``    ``i ``=` `bisect_left(a, x)``    ``if` `i:``        ``return` `(i``-``1``)``    ``else``:``        ``return` `-``1`` ` `# Driver code``a  ``=` `[``1``, ``2``, ``4``, ``4``, ``8``]``x ``=` `int``(``7``)``res ``=` `BinarySearch(a, x)``if` `res ``=``=` `-``1``:``    ``print``(``"No value smaller than "``, x)``else``:``    ``print``(``"Largest value smaller than "``, x, ``" is at index "``, res)`
Output:
```Largest value smaller than  7  is at index  3
```

Finding rightmost occurrence

bisect.bisect_right(a, x, lo=0, hi=len(a)) Returns rightmost insertion point of x in a sorted list a. Last two parameters are optional, they are used to search in sublist.

 `# Python code to demonstrate working``# of binary search in library``from` `bisect ``import` `bisect_right`` ` `def` `BinarySearch(a, x):``    ``i ``=` `bisect_right(a, x)``    ``if` `i !``=` `len``(a)``+``1` `and` `a[i``-``1``] ``=``=` `x:``        ``return` `(i``-``1``)``    ``else``:``        ``return` `-``1`` ` `a  ``=` `[``1``, ``2``, ``4``, ``4``]``x ``=` `int``(``4``)``res ``=` `BinarySearch(a, x)``if` `res ``=``=` `-``1``:``    ``print``(x, ``"is absent"``)``else``:``    ``print``(``"Last occurrence of"``, x, ``"is present at"``, res)`
Output:
```Last occurrence of 4 is present at 3
```