Предполагая, что они отсортированы внутри, т. Е. Значения диапазона никогда не бывают (высокие, низкие), это позволит сравнить все элементов в a с всеми элементами в b одновременно:
import numpy as np
list_a = [(1, 100), (300, 550), (551, 1999)]
list_b = [(0, 600), (550, 2000), (2000, 2200), (50, 70)]
a = np.array(a)
b = np.array(b)
comparison = np.logical_and(a[:, 1] >= b[:, 1, None], a[:, 0] <= b[:, 0, None])
idx_a, idx_b = idx = np.nonzero(comparison)
print(a[idx_a])
print(b[idx_b])
array([[ 1, 100],
[ 300, 550],
[ 551, 1999]])
array([[ 0, 600],
[ 0, 600],
[ 550, 2000]])
Это дает вам интервалы в a, которые содержатся в b.Индексы даны в idx_a
и idx_b
.