我是编程的新手,所以这段代码可能相当混乱。无论如何我想要做的是采取两个列表(xy1,xy2),它们保持矩形的角落,看看它们是否与其他矩形重叠。我用它的格式是x1,y1在数组xy1和x2中,y2在数组xy2中。到目前为止,我只使用x轴,因此两个阵列中的每个其他条目。我的问题是,当我找到重叠并删除它们时,我得到一个索引错误。我相信问题与使用del和我的for循环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
答案 0 :(得分:0)
你的问题是,每次删除某些内容时,数组xy1的长度都在缩小。但是你的计数迭代器在不考虑这一点的情况下不断增加。如果您在xy1
count1
和del
,就可以更清楚地看到行为
答案 1 :(得分: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