尝试使用两个for循环合并重叠的矩形,但在删除原始矩形时会出错

时间:2014-09-11 08:45:24

标签: python list iteration ocr rectangles

new_blobs = []

for blob in list(blobs):

    expanded_blob = Blob(blob.x - merge_threshold, blob.y - merge_threshold, blob.width + merge_threshold, blob.height + merge_threshold)

    for other_blob in list(blobs):
        if other_blob != blob and expanded_blob.intersects(other_blob):
            new_blob = Blob(blob.x, blob.y, blob.width, blob.height)
            new_blob.expand_to_contain_blob(other_blob)
            new_blobs.append(new_blob)
            blobs.remove(other_blob)
            blobs.remove(blob)

return blobs + new_blobs

这会导致此错误

ValueError: list.remove(x): x not in list

我正在尝试合并任何足够接近的矩形,首先我检查与扩展矩形的碰撞然后合并它们。 blob有一个扩展的方法,以便另一个矩形适合内部,所以我创建一个基于其中一个矩形的新矩形,并让它展开以适应另一个矩形然后我想摆脱它形成的两个矩形。

问题是我无法从我正在迭代的列表中删除一个项目,所以我做了一个副本,首先这意味着我现在将迭代已经删除的矩形并尝试再次删除它们,我试过保留一个使用过的矩形列表,每次检查是否使用了矩形,然后再检查它,我真的不想这样做,但它返回了同样的错误。

真的坚持这个。任何帮助或见解将不胜感激!

1 个答案:

答案 0 :(得分:0)

list(blobs)是临时转化

你需要给list_blobs =list(blobs)然后循环

使用list_blobs.remove()

  for blob in list_blobs:
    expanded_blob = Blob(blob.x, blob.y, blob.width + merge_threshold, blob.height + merge_threshold)

    for other_blob in list_blobs:
        if other_blob != blob and expanded_blob.intersects(other_blob):
            new_blob = Blob(blob.x, blob.y, blob.width, blob.height)
            new_blob.expand_to_contain_blob(other_blob)
            new_blobs.append(new_blob)
            list_blobs.remove(other_blob)
            list_blobs.remove(blob)

return list_blobs + new_blobs