mirror of
https://github.com/python/cpython.git
synced 2025-09-26 18:29:57 +00:00
Add example of how to do key lookups with bisect().
This commit is contained in:
parent
3bca523a8c
commit
87be88c2e9
1 changed files with 18 additions and 0 deletions
|
@ -85,4 +85,22 @@ is a 'B', etc.
|
||||||
>>> map(grade, [33, 99, 77, 44, 12, 88])
|
>>> map(grade, [33, 99, 77, 44, 12, 88])
|
||||||
['E', 'A', 'B', 'D', 'F', 'A']
|
['E', 'A', 'B', 'D', 'F', 'A']
|
||||||
|
|
||||||
|
Unlike the :func:`sorted` function, it does not make sense for the :func:`bisect`
|
||||||
|
functions to have *key* or *reversed* arguments because that would lead to an
|
||||||
|
inefficent design (successive calls to bisect functions would not "remember"
|
||||||
|
all of the previous key lookups).
|
||||||
|
|
||||||
|
Instead, it is better to search a list of precomputed keys to find the index
|
||||||
|
of the record in question::
|
||||||
|
|
||||||
|
>>> data = [('red', 5), ('blue', 1), ('yellow', 8), ('black', 0)]
|
||||||
|
>>> data.sort(key=lambda r: r[1]) # precomputed list of keys
|
||||||
|
>>> keys = [r[1] for r in data]
|
||||||
|
>>> data[bisect_left(keys, 0)]
|
||||||
|
('black', 0)
|
||||||
|
>>> data[bisect_left(keys, 1)]
|
||||||
|
('blue', 1)
|
||||||
|
>>> data[bisect_left(keys, 5)]
|
||||||
|
('red', 5)
|
||||||
|
>>> data[bisect_left(keys, 8)]
|
||||||
|
('yellow', 8)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue