1

我是编程新手,所以这段代码可能相当垃圾。无论如何,我要做的是获取两个列表(xy1,xy2),它们包含一个矩形的角,看看它们是否与其他矩形重叠。我使用的格式是 x1,y1 在数组 xy1 中,x2,y2 在数组 xy2 中。到目前为止,我只使用 x 轴,所以两个数组中的所有其他条目。我的问题是,当我找到重叠的并删除它们时,我得到一个索引错误。我相信问题与使用 del 和我的 for loops max 有关,我使用数组的 len 得到。如果没有重叠并触发已删除的调用,该代码有时也会起作用。任何建议表示赞赏。谢谢

#1,3 are x cords for first rect, 5 and 8 are x cords for second rect
xy1=[1,6,5,12,1,17]
xy2=[3,9,8,16,4,19]
def make(xy1,xy2):
    count0=0
    for count1 in range(count0,len(xy1),2):
        for count2 in range(count0,len(xy2),2):
            if xy1[count1] in range(xy1[count2],xy2[count2]) and not (count1==count2):
                xy1=removed(xy1,count1)
                xy2=removed(xy2,count1)
    return xy1,xy2

def removed(xy1,count1):
    #removes the x,y that was overlapped along with the other 2 corners of the rect
    del xy1[count1:count1+2]
    return xy1

make(xy1,xy2)

print xy1,xy2
4

2 回答 2

0

您的问题是,每次删除某些内容时,数组 xy1 的长度都会缩小。但是您的计数迭代器不断增加而没有考虑到这一点。如果您打印xy1并且count1每次都在您做之前,您可以更清楚地看到行为del

于 2012-04-13T00:24:32.433 回答
0

就像 TJD 说的那样,你有一个正在缩小的数组,所以你会得到一个索引超出范围的错误。

无需过多更改代码,您可以通过向后浏览列表来解决此问题。如果您更改程序的前三行,您应该得到您想要的结果并且不再出现错误。

def make(xy1,xy2):
count0=-1
for count1 in range(len(xy1)-2,count0,-2):
    for count2 in range(len(xy2)-2,count0,-2):
        if xy1[count1] in range(xy1[count2],xy2[count2]) and not (count1==count2):
            xy1=removed(xy1,count1)
            xy2=removed(xy2,count1)
return xy1,xy2
于 2012-04-13T01:35:28.857 回答