Skip to main content

A binary search extension of Python `bisect` module that enables flexible comparisons.

Project description

more_bisect

A binary search extension of Python bisect module that enables flexible comparisons. Includes these functions:

  • first_pos_eq: find the first index of value equal to x
  • last_pos_eq: find the last index of value equal to x
  • last_pos_lt: find the last index of value less than x
  • last_pos_le: find the last index of value less than or equal to x
  • first_pos_gt: find the first index of value greater than x
  • first_pos_ge: find the first index of value greater than or equal to x
  • bisect_left: the same as bisect.bisect_left
  • bisect_right: the same as bisect.bisect_right
  • last_closest_to: find the last index of value closest to x
  • first_closest_to: find the first index of value closest to x

All functions are of the same signature:

(x, a=None, lo=None, hi=None, key=None)
  • x: the value based on which to search
  • a: the array to search for; if provided None, key will be used to form an array (see below)
  • lo, hi: bound the range (left inclusive, right exclusive) of array to search
  • key: if a is not None, a[i] will be mapped to key(a[i]) on each index i; if a is None, a[i] will be mapped to key(i) on each index i. This way, when a is None, not all elements of the fake array need to be given before binary search

Installation

pip install more_bisect

View the package at PyPI.

Examples

  1. Invoke first_pos_eq with an array:
import more_bisect
more_bisect.first_pos_eq(3, [2, 3, 3, 4, 4, 4])
  1. Invoke last_closest_to with a function (the code snippet can be a solution to LeetCode 887 Super Egg Drop:
import more_bisect
class Solution:
    def superEggDrop(self, k: int, n: int) -> int:
        memo = {}

        def recur(k, n):
            if (k, n) not in memo:
                if n == 0:
                    ans = 0
                elif k == 1:
                    ans = n
                else:
                    i = more_bisect.last_closest_to(
                            0, lo=1, hi=n + 1,
                            key=lambda x: recur(k - 1, x - 1) - recur(k, n - x))
                    ans = 1 + max(recur(k - 1, i - 1), recur(k, n - i))
                memo[k, n] = ans
            return memo[k, n]
        
        return recur(k, n)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

more_bisect-0.1.1.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

more_bisect-0.1.1-py3-none-any.whl (4.3 kB view details)

Uploaded Python 3

File details

Details for the file more_bisect-0.1.1.tar.gz.

File metadata

  • Download URL: more_bisect-0.1.1.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7

File hashes

Hashes for more_bisect-0.1.1.tar.gz
Algorithm Hash digest
SHA256 19e71650f549d1f50f9796559e8006433ef7463e3e48b448c1caec90ac24d9db
MD5 49889598a0573003f06de22f853e531a
BLAKE2b-256 a8470f7211707929667a235aeef04931800a5d45080b06bbd86b6e236d86a8be

See more details on using hashes here.

Provenance

File details

Details for the file more_bisect-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: more_bisect-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 4.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.8.0 pkginfo/1.8.2 readme-renderer/32.0 requests/2.27.1 requests-toolbelt/0.9.1 urllib3/1.26.8 tqdm/4.62.3 importlib-metadata/4.11.1 keyring/23.5.0 rfc3986/2.0.0 colorama/0.4.4 CPython/3.9.7

File hashes

Hashes for more_bisect-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 91a8364f6c88544504d437ae1e0a7829deb15b004b70b29c1f6711497a56a233
MD5 3836c2ebb1c36d13e8e34a91b58434af
BLAKE2b-256 916f2fb7b4fdaf074bbbfab194d4d1cb18762456aa7b3119432eb9fea0cf0bf6

See more details on using hashes here.

Provenance

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page