Python3にはbisectというモジュールがあり、この中にはbisect_left、bisect_rightという関数が用意されています。bisect_leftはソート済みの配列を二分探索により探索し、挿入点のうちもっとも左側のものを戻り値とします。bisect_rightはその逆で、挿入点のうち、もっとも右側が戻り値となります。
import bisect
digits = [111, 222, 333, 333, 333, 444, 555]
bisect.bisect_left(digits, 333) #=> 2
bisect.bisect_right(digits, 333) #=> 5
Go言語でbisect_leftやbisect_rightと同じようなことをしたい場合、すなわち、__二分探索でもっとも左側の挿入点を探したい、もっとも右側の挿入点を探したい__場合、sortパッケージのSearchを利用し、それぞれ次のように実装します。
digits := []int{111, 222, 333, 333, 333, 444, 555}
sort.Search(len(digits), func(i int) bool { return digits[i] >= 333 }) //=> 2
sort.Search(len(digits), func(i int) bool { return digits[i] > 333 }) //=> 5
つまりbisect_leftの場合は等号付き不等号で比較、bisect_rightの場合は不等号で比較すればよいわけです。