Как часть моего кода, у меня есть следующая проблема:
У меня есть следующие списки:
intervals = [(1,3), (5,12), (16,20)]
labels = [[1,2],[1],[2,3]]
Первый - это список отсортированных непересекающихся интервалов, а второй - «разрешенные» метки соответствующего интервала. Например, метки 1 и 2 допускаются в интервале (1,3)
. Также интервалы имеют вид [а, б).
Я хочу найти, если для кортежа (t, l)
:
t
находится в пределах интервала между списками.
l
разрешено в этом интервале.
Подход, который я мог бы придумать, - разбить список интервалов на минимумы и максимумы:
lows = np.array([1,5,16])
highs = np.array([3,12,20])
find_indx = np.where(lows >= t)
if len(find_indx[0]) > 0:
indx = find_indx[0][0]
if t < highs[low_indx] and l in labels[low_indx]:
return 'Yes'
return 'No'
Есть ли более быстрый / чистый подход к этой проблеме? Разве быстрее использовать бинарный поиск, чем встроенную функцию python?