簡體   English   中英

語句為假時,while循環不會停止

[英]While loop does not stop when the statement is false

我正在嘗試填寫詞典列表。 這個想法是從構建為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,因此代碼不會停止。 我做錯了什么?

您只需要在每次通過optgridnewneighbor完整過程之后測試gp的長度; 大概,該長度在一次這樣的傳遞中從100以下開始,到最后達到111。 如果要在達到100時立即停止,則需要在添加到gp時測試長度。

break語句可用於停止循環。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM