Title: bisect should support a custom comparison function
Type: enhancement Stage:
Components: Library (Lib) Versions:
Status: closed Resolution: rejected
Dependencies: Superseder:
Assigned To: Nosy List: jsjoseph, rhettinger, splitscreen
Priority: normal Keywords:

Created on 2006-03-16 19:26 by jsjoseph, last changed 2008-03-24 08:26 by rhettinger. This issue is now closed.

Messages (3)
msg61225 - (view) Author: Jonathan S. Joseph (jsjoseph) Date: 2006-03-16 19:26
The 'bisect' module provides functions for finding the
proper insertion point of an item in a sorted list. 

The sort() function for lists supports passing in a
custom comparison function, however none of the
functions in bisect() support this. The method used by
bisect to find the proper insertion point is not
documented, but I guess the module relies on a natural
ordering for the items, or on the items of the list
implementing __cmp__. 

I suggest adding a 5th argument, with keyword 'cmp', to
the functions in the 'bisect' module that would allow
supplying a custom comparison function, as for 'sort'.

bisect_left(  	list, item[, lo[, hi]][,cmp])
bisect_right( 	list, item[, lo[, hi]][,cmp])
insort_left( 	list, item[, lo[, hi]][,cmp])
insort_right( 	list, item[, lo[, hi]][,cmp])
msg61226 - (view) Author: Matt Fleming (splitscreen) Date: 2006-04-03 12:57
Logged In: YES 

See patch #1462228.
msg64401 - (view) Author: Raymond Hettinger (rhettinger) * (Python committer) Date: 2008-03-24 08:26
Sorry, am closing this RFE because its not the best way to use the 
bisect tools.  The cmp function is going away in Py3.0 in favor of key 
functions.  Yet, even those do not play nicely with bisect because the 
function results are not stored between successive calls to bisect.  
Accordingly, it is almost always better to arrange the records in a 
decorated style so that they can be compared directly and not through a 
cmp or key function.

The one misgiving is that is feels odd to be able to sort by a key 
function but not maintain that order or search that ordering using the 
bisect module.  Yet, there is a simple reason for the difference -- sort
() works on the entire sequence at once and can take advantage of the 
single key function call per element -- in contrast, the bisect 
functions have finer granularity and the cmp/key functions no longer 
make sense.
Date User Action Args
2008-03-24 08:26:41rhettingersetstatus: open -> closed
resolution: rejected
messages: + msg64401
nosy: + rhettinger
2006-03-16 19:26:31jsjosephcreate