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
正如你所看到的,要刪除的項目已從名單上拿起其中正在應用刪除方法。關於dummy的用法,我在直接刪除mem3時使用了這個錯誤。這是我的調試過程的一部分。
更新:最後確定了錯誤的來源。感謝其中一位追蹤代碼漏洞的成員(Bharel)。項目被多次添加到鄰居列表中,因此當我嘗試從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