繁体   English   中英

Python:在 while 循环中创建新列表

[英]Python: Creating new lists inside while loop

因此,在我对 First-improvement local search 的方法中,我遇到了一个似乎无法前进的点。 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

这个输出是一个无限循环,其中最佳变量奇怪地更新。

似乎错误在于solbest 我需要它们是新的、独立的列表。

input("按回车继续...")

在第一次/第二次打印变量时,您可以通过这种方式逐步调试它。

我在分配新列表时添加[:]解决了它:

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

添加[:]会创建列表的副本而不是引用它,这就是为什么我无法比较bestsol :它们总是引用initial

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM