# Binary Search (bisect) in Python

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

Please refer Binary Search for writing your own Binary Search code.

**Reference :**

https://docs.python.org/3/library/bisect.html

Attention reader! Don’t stop learning now. Get hold of all the important DSA concepts with the **DSA Self Paced Course** at a student-friendly price and become industry ready. To complete your preparation from learning a language to DS Algo and many more, please refer **Complete Interview Preparation Course****.**

In case you wish to attend **live classes **with experts, please refer **DSA Live Classes for Working Professionals **and **Competitive Programming Live for Students**.