我正在尝试填写一个词典列表。这个想法是从一些构造为bestpar = {'V0': 0.01976, 'theta': 0.1330, 'omega': 0.6131, 'kappa': 0.3534, 'rho': -0.8073}
的字典开始,并使用这个函数迭代地更新它们,每次召回时都会从1创建10个新词典:
def addneighbor(optgrid):
sample_bestpar = bestpar.copy()
neighbor = []
for key in sample_bestpar.keys():
neighbor.append({k : sample_bestpar[k] if k!=key else sample_bestpar[k] + delta[key] for k in sample_bestpar})
neighbor.append({k : sample_bestpar[k] if k!=key else sample_bestpar[k] - delta[key] for k in sample_bestpar})
return neighbor
我想要做的是将这些新词典放在列表中,直到列表的长度变为100,然后停止。显然,该函数首先应用于初始词典,然后应用于添加的新词典等等,达到了所需的长度。执行此操作的代码如下:
optgrid = [bestpar]
gp = []
gp.extend(optgrid)
while (len(gp) < 100):
for element in optgrid:
newneighbor = addneighbor(element)
gp.extend(newneighbor)
for element in newneighbor:
newnewneighbor = addneighbor(element)
gp.extend(newnewneighbor)
在这种情况下,初始词典列表只由一个(bestpar)组成,但我想调整我的循环以考虑可能有更多初始词典的情况。不幸的是,while循环似乎不起作用,因为gp的最终长度变为111,因此代码不会停止。我做错了什么?
答案 0 :(得分:1)
在完成gp
和optgrid
的完整过程后,您只测试newneighbor
的长度;据推测,在一次这样的传球中,长度从低于100开始,到最后达到111。如果要在达到100时立即停止,则需要在添加到gp
时测试长度。
break
语句可用于停止循环。