def cluster(body1list,outerlist,body2list,lx,ly,lz,maxrad):
neighborlist=[]
if any([len(body2list)==0,len(outerlist)==0]):
return body1list,body2list
else:
if len(outerlist)>1:
for mem1 in outerlist:
for mem2 in body2list:
if overlap(mem1,mem2,maxrad,lx,ly,lz)==1:
neighborlist.append(mem2)
if len(outerlist)==1:
for mem2 in body2list:
if overlap(outerlist[0],mem2,maxrad,lx,ly,lz)==1:
neighborlist.append(mem2)
body1list=neighborlist+body1list
if len(neighborlist)!=0:
for mem3 in neighborlist:
dummy=copy.deepcopy(mem3)
if dummy in body2list:
print "True"
else:
print "false"
body2list.remove(dummy)
return cluster(body1list,neighborlist,body2list,lx,ly,lz,maxrad)
エラーメッセージはあなたが見ることができるように、項目がリストからピックアップして削除する私はエラーを取得しています
File "aggregation.py", line 107, in cluster
body2list.remove(dummy)
ValueError: list.remove(x): x not in list
されています削除メソッドが適用されています。ダミーの使い方については、mem3を直接削除してエラーが出たときに使いました。これは私のデバッグプロセスの一部でした。
更新:最後にエラーの原因を特定しました。コードの抜け穴を追跡したメンバーの一人(Bharel)に感謝します。アイテムがneighborlistに複数回追加されていたため、body2listからアイテムを削除しようとしたときにエラーが発生しました。正しいコードは、次のようになります。
if len(outerlist)>1:
for mem1 in outerlist:
for mem2 in body2list:
if overlap(mem1,mem2,maxrad,lx,ly,lz)==1:
if mem2 in neighborlist:
pass
else:
neighborlist.append(mem2)
これは小さな希釈システムでテストしたときにイメージング結果と一致しています。お待ち頂きまして、ありがとうございます。
エラーはかなり明確なようだ - そしてチャンスがありますdummy' _isn't_ neighborlist' ''であれば、それはないかもしれません'body2list'にもあります...どういうことがありますか? – mgilson