一种pythonic方法,用于查找值是否在列表中的两个值之间

时间:2009-12-19 19:33:04

标签: list grid range python snapping

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

列表如下:[0,5,10,15,20] 值得一提,比如8。

标准方法是从开始直到我们达到比我们更大的值(如下例所示),或执行binary search

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方法,因为这虽然很短,看起来有点眼睛疼痛。 谢谢你的时间!

2 个答案:

答案 0 :(得分:20)

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

编辑:

bisect — Array bisection algorithm

答案 1 :(得分: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")