1

私はプログラミングに慣れていないので、このコードはおそらくかなりジャンクです。とにかく、私がやろうとしているのは、長方形の角を保持する2つのリスト(xy1、xy2)を取り、それらが他の長方形と重なるかどうかを確認することです。私が使用する形式は、x1、y1 は配列 xy1 にあり、x2、y2 は配列 xy2 にあります。これまでのところ、私は x 軸でのみ作業しているため、両方の配列の他のすべてのエントリです。私の問題は、重複しているものを見つけて削除すると、インデックスエラーが発生することです。問題は、配列のlenを使用して取得したdelとforループの最大値の使用に関係していると思います。削除された呼び出しが重複してトリガーされない場合、コードが機能することもあります。任意の提案をいただければ幸いです。ありがとう

#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と、動作をより明確に確認できますcount1del

于 2012-04-13T00:24:32.433 に答える
0

TJDが言ったように、縮小している配列があるため、範囲外のインデックスエラーが発生します。

コードをあまり変更せずに、リストを逆方向にたどることでこれを解決できます。手順の最初の 3 行を変更すると、必要な結果が得られ、エラーは発生しなくなります。

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 に答える