Python 检查距离并从列表中删除

Python 检查距离并从列表中删除,python,list,Python,List,我有一个元组列表,其中每个元组都是一个二维坐标框。清单的结构如下所示: [(x_top_left, y_top_left, x_bottom_right, x_bottom_right)] 我需要扫描列表,确定哪些连续对之间的距离很小,然后删除。 这是我第一次尝试,但有时会出现超出范围的错误。这可能是因为我正在循环索引并删除它们,这会弄乱原始索引列表。有没有更有效的方法?在下面的示例中,应从框列表中删除(245、17、392、108)。此时,delta只是使用左上角x坐标表示的水平距离 del

我有一个元组列表,其中每个元组都是一个二维坐标框。清单的结构如下所示:

[(x_top_left, y_top_left, x_bottom_right, x_bottom_right)]
我需要扫描列表,确定哪些连续对之间的距离很小,然后删除。 这是我第一次尝试,但有时会出现超出范围的错误。这可能是因为我正在循环索引并删除它们,这会弄乱原始索引列表。有没有更有效的方法?在下面的示例中,应从
列表中删除
(245、17、392、108)
。此时,delta只是使用左上角x坐标表示的水平距离

delete_ind_counter = []
boxes =  [(52, 19, 154, 103), (255, 17, 392, 108), (245, 17, 392, 108)]
HORIZONTAL_BOX_THRESHOLD = 100
for ind in range(len(boxes) - 1):
    # calculate the distance between successive boxes
    delta = boxes[ind + 1][0] - boxes[ind][0]
    if delta < HORIZONTAL_BOX_THRESHOLD:
        delete_ind_counter.append(ind)

# delete all marked indices
for ind in delete_ind_counter:
    del boxes[ind]
return boxes
delete_ind_计数器=[]
方框=[(52,19,154,103),(255,17,392,108),(245,17,392,108)]
水平\u框\u阈值=100
对于范围内的ind(len(box)-1):
#计算连续框之间的距离
delta=box[ind+1][0]-box[ind][0]
如果增量<水平\u盒\u阈值:
删除索引计数器。追加(索引)
#删除所有标记的索引
对于delete_ind_计数器中的ind:
del box[ind]
返回框

您可以先删除最后一个项目,这样就不会影响其余项目的索引

for ind in reversed(delete_ind_counter):