mirror of
				https://github.com/python/cpython.git
				synced 2025-11-04 07:31:38 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			56 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			TeX
		
	
	
	
	
	
% 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>.
 | 
						|
 | 
						|
\section{\module{bisect} ---
 | 
						|
         Array bisection algorithm}
 | 
						|
 | 
						|
\declaremodule{standard}{bisect}
 | 
						|
\modulesynopsis{Array bisection algorithms for binary searching.}
 | 
						|
 | 
						|
 | 
						|
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 (i.e., the boundary conditions are already right!).
 | 
						|
 | 
						|
The following functions are provided:
 | 
						|
 | 
						|
\begin{funcdesc}{bisect}{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.  The
 | 
						|
return value is suitable for use as the first parameter to
 | 
						|
\code{\var{list}.insert()}.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
\begin{funcdesc}{insort}{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(\var{list}, \var{item},
 | 
						|
\var{lo}, \var{hi}), \var{item})}.
 | 
						|
\end{funcdesc}
 | 
						|
 | 
						|
 | 
						|
\subsection{Example}
 | 
						|
\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}
 |