有一个排序列表和一些随机值,我想找到值在哪个范围内。
列表如下:[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方法,因为这虽然很短,看起来有点眼睛疼痛。 谢谢你的时间!
答案 0 :(得分:20)
>>> import bisect
>>> grid = [0, 5, 10, 15, 20]
>>> value = 8
>>> bisect.bisect(grid, value)
2
编辑:
答案 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")