while语句为false时,循环不会停止

时间:2017-12-10 18:21:19

标签: python dictionary while-loop

我正在尝试填写一个词典列表。这个想法是从一些构造为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,因此代码不会停止。我做错了什么?

1 个答案:

答案 0 :(得分:1)

在完成gpoptgrid的完整过程后,您只测试newneighbor的长度;据推测,在一次这样的传球中,长度从低于100开始,到最后达到111。如果要在达到100时立即停止,则需要在添加到gp时测试长度。

break语句可用于停止循环。