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
如您所见,要删除的项目是从应用remove方法的列表中选取的。关于虚拟的用法,我在直接删除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)
在小型稀释系统上进行测试时,这样可以获得与成像结果一致的结果。谢谢你的耐心等待。
答案 0 :(得分:0)
我最好的猜测是,该项目会被添加几次到neighborlist
,因此从body2list
移除它比存在的次数多一次会引发异常。
另外,请记住,您正在使用深层复制,这意味着您要创建一个新实例。如果您正在复制一个不覆盖__eq__
的对象,那么它就不一样了:
a = object()
l = [a]
l.remove(copy.deepcopy(a)) # Raises exception