7

有一个排序列表和一些随机值,我想找到该值在哪个范围内。

列表是这样的: [0, 5, 10, 15, 20] 值是,比如说 8。

标准的方法是要么从头开始直到我们达到比我们更大的值(如下例所示),要么执行二分查找

grid = [0, 5, 10, 15, 20]
value = 8
result_index = 0
while result_index < len(grid) and grid[result_index] < value:
    result_index += 1

print result_index

我想知道是否有更 Pythonic 的方法,因为这虽然很短,但看起来有点眼痛。感谢您的时间!

4

2 回答 2

20
>>> import bisect
>>> grid = [0, 5, 10, 15, 20]
>>> value = 8
>>> bisect.bisect(grid, value)
2

编辑:

bisect - 数组二等分算法

于 2009-12-19T19:36:56.303 回答
1
for min, max in zip(grid, grid[1:]): # [(0, 5), (5, 10), (10, 15), (15, 20), (20, 25)]
  if max <= value < min: #previously: if value in xrange(min, max):
    return min, max
raise ValueError("value out of range")
于 2009-12-19T19:58:47.477 回答