Нахождение, где данное число попадает в раздел - PullRequest
0 голосов
/ 10 апреля 2019

Предположим, у меня есть отсортированный массив целых чисел, скажем

partition = [0, 3, 7, 12, 18, 23, 27]

и затем значение

value = 9

Я хотел бы вернуть интервал, в котором находится мое значение. Например

bounds = function(partition, value)
print(bounds)
>>>[7,12]

Есть ли какая-нибудь функция, которая может мне помочь или мне нужно создать ее с нуля?

Ответы [ 3 ]

1 голос
/ 10 апреля 2019

Модуль bisect хорош для эффективной работы.Он вернет индекс верхней границы.

Вам нужно будет проверить ошибки, если значение может выйти за пределы:

from bisect import bisect
partition = [0, 3, 7, 12, 18, 23, 27]
value = 9
top = bisect(partition, value)

print(partition[top-1], partition[top])
# 7 12
1 голос
/ 10 апреля 2019

Попробуйте numpy.searchsorted (). Из документального фильма:

Найдите индексы, в которые должны быть вставлены элементы для поддержания порядка.

import numpy as np
partition = np.array( [0, 3, 7, 12, 18, 23, 27] )
value = 9
idx = np.searchsorted(partition,value)
bound = (partition[idx-1],partition[idx])
print(bound)
>>>>(7,12)

Преимущество searchsorted состоит в том, что он может дать вам индекс для нескольких значений одновременно.

0 голосов
/ 10 апреля 2019
 def function(partition,value):
  for i in range(len(partition)):
  if partition[i]<value and partition[i+1]>value:
    print [partition[i],partition[i+1]]
 partition = [0, 3, 7, 12, 18, 23, 27,5,10]
 value=9
 function(partition,value)
...