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 に答える