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