Brian Scearce <[email protected]> added the comment:
This was closed over a year ago, but since mark.dickinson was asking for
convincing use-cases: I'm breaking up a file into line-delimited chunks. These
chunks are non-overlapping, contiguous, and tend to be fairly large, so I'm
just recording the start line of each chunk in a 2-ple:
mapping = [
(10, 'first chunk'),
(50, 'second chunk'),
(60, 'third chunk')
]
Lines 10-49 are in the first chunk, lines 50-59 are in the second, lines 60+
are in the third. So:
def CategorizeLine(line, mapping):
loc = bisect.bisect([m[0] for m in mapping], line)
if loc == 0:
return None # before first chunk
return mapping[loc-1][1]
It Would Be Nice if I could write the second line as:
loc = bisect.bisect(mapping, line, key=lambda m:m[0])
The bisect documentation suggests pre-computing the key list, but it seems
messy and error-prone to keep a redundant data structure in sync with its
source. I could also rewrite my "mapping" data structure to be two parallel
lists instead of one list of 2-ples, but this data structure is more readable
and extensible and handles empty lists more naturally.
----------
nosy: +bls
_______________________________________
Python tracker <[email protected]>
<http://bugs.python.org/issue4356>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
http://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com