summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorRaymond Hettinger <python@rcn.com>2009-06-11 22:04:49 (GMT)
committerRaymond Hettinger <python@rcn.com>2009-06-11 22:04:49 (GMT)
commit16e527fc1aa4677dc1f6c2f6aabb2dadc4631f61 (patch)
tree1b1cbd24cf30adc3491115f3db2d19029f62e8a0 /Doc
parentff4018f388a939c8792fb36864a2527c95d93bd2 (diff)
downloadcpython-16e527fc1aa4677dc1f6c2f6aabb2dadc4631f61.zip
cpython-16e527fc1aa4677dc1f6c2f6aabb2dadc4631f61.tar.gz
cpython-16e527fc1aa4677dc1f6c2f6aabb2dadc4631f61.tar.bz2
Add example of how to do key lookups with bisect().
Diffstat (limited to 'Doc')
-rw-r--r--Doc/library/bisect.rst20
1 files changed, 19 insertions, 1 deletions
diff --git a/Doc/library/bisect.rst b/Doc/library/bisect.rst
index 93391c3..9364ed8 100644
--- a/Doc/library/bisect.rst
+++ b/Doc/library/bisect.rst
@@ -85,4 +85,22 @@ is a 'B', etc.
>>> map(grade, [33, 99, 77, 44, 12, 88])
['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)