Python-创建while循环内的新列表

2024-10-03 02:34:25 发布

您现在位置:Python中文网/ 问答频道 /正文

因此,在我的第一次改进局部搜索的方法中,我遇到了一个我似乎无法前进的点。if语句和变量赋值让我抓狂。当我用指纹“调试”它时,我无法看到发生了什么,我需要有人来解释这件事。在

def main():
    start = time.time()
    matrix = [[5, 3], [2, 7], [9, 1], [0, 6], [8, 4]]
    initial = [3, 1, 4, 5, 2]
    combs = [[0, 1], [0, 2], [0, 3], [0, 4], [1, 2],[1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]
    i = 0
    while time.time() - start < 1:
        best = initial
        while i < 5:
            sol = best
            fBest = fMax(best, matrix)

            sol[combs[i][0]], sol[combs[i][1]] = sol[combs[i][1]], sol[combs[i][0]]

            fCurrent = fMax(sol, matrix)
            if fCurrent < fBest:
                best = sol
                i = 0
                continue
            i = i + 1
    print(best)
    return best

它的输出是一个无限循环,在这个循环中,best变量会奇怪地更新。在

似乎错误在于sol和{}。我需要他们是新的,独立的名单。在


Tags: 方法iftime局部语句startmatrixinitial
2条回答

使用

输入(“按Enter键继续…”)

在第一次/第二次打印变量时,这样就可以一步一步地调试它。在

我只需在分配新列表时添加[:]就解决了这个问题:

best = initial[:]
sol = best[:]
best = sol[:]

添加[:]会创建列表的副本而不是引用它,这就是为什么我不能比较best和{}:它们都总是引用initial。在

相关问题 更多 >