\section{\module{bisect} ---
         Array bisection algorithm}

\declaremodule{standard}{bisect}
\modulesynopsis{Array bisection algorithms for binary searching.}
\sectionauthor{Fred L. Drake, Jr.}{fdrake@acm.org}
% LaTeX produced by Fred L. Drake, Jr. <fdrake@acm.org>, with an
% example based on the PyModules FAQ entry by Aaron Watters
% <arw@pythonpros.com>.


This module provides support for maintaining a list in sorted order
without having to sort the list after each insertion.  For long lists
of items with expensive comparison operations, this can be an
improvement over the more common approach.  The module is called
\module{bisect} because it uses a basic bisection algorithm to do its
work.  The source code may be most useful as a working example of the
algorithm (the boundary conditions are already right!).

The following functions are provided:

\begin{funcdesc}{bisect_left}{list, item\optional{, lo\optional{, hi}}}
  Locate the proper insertion point for \var{item} in \var{list} to
  maintain sorted order.  The parameters \var{lo} and \var{hi} may be
  used to specify a subset of the list which should be considered; by
  default the entire list is used.  If \var{item} is already present
  in \var{list}, the insertion point will be before (to the left of)
  any existing entries.  The return value is suitable for use as the
  first parameter to \code{\var{list}.insert()}.  This assumes that
  \var{list} is already sorted.
\versionadded{2.1}
\end{funcdesc}

\begin{funcdesc}{bisect_right}{list, item\optional{, lo\optional{, hi}}}
  Similar to \function{bisect_left()}, but returns an insertion point
  which comes after (to the right of) any existing entries of
  \var{item} in \var{list}.
\versionadded{2.1}
\end{funcdesc}

\begin{funcdesc}{bisect}{\unspecified}
  Alias for \function{bisect_right()}.
\end{funcdesc}

\begin{funcdesc}{insort_left}{list, item\optional{, lo\optional{, hi}}}
  Insert \var{item} in \var{list} in sorted order.  This is equivalent
  to \code{\var{list}.insert(bisect.bisect_left(\var{list}, \var{item},
  \var{lo}, \var{hi}), \var{item})}.  This assumes that \var{list} is
  already sorted.
\versionadded{2.1}
\end{funcdesc}

\begin{funcdesc}{insort_right}{list, item\optional{, lo\optional{, hi}}}
  Similar to \function{insort_left()}, but inserting \var{item} in
  \var{list} after any existing entries of \var{item}.
\versionadded{2.1}
\end{funcdesc}

\begin{funcdesc}{insort}{\unspecified}
  Alias for \function{insort_right()}.
\end{funcdesc}


\subsection{Examples}
\nodename{bisect-example}

The \function{bisect()} function is generally useful for categorizing
numeric data.  This example uses \function{bisect()} to look up a
letter grade for an exam total (say) based on a set of ordered numeric
breakpoints: 85 and up is an `A', 75..84 is a `B', etc.

\begin{verbatim}
>>> grades = "FEDCBA"
>>> breakpoints = [30, 44, 66, 75, 85]
>>> from bisect import bisect
>>> def grade(total):
...           return grades[bisect(breakpoints, total)]
...
>>> grade(66)
'C'
>>> map(grade, [33, 99, 77, 44, 12, 88])
['E', 'A', 'B', 'D', 'F', 'A']

\end{verbatim}
