在一个列表上操作也会改变另一个列表

时间:2012-08-20 02:01:38

标签: python python-2.7

几个月前,我用一种效率极低的算法解决了Project Euler的问题67。今天,我意识到如何做得更好,并且在尝试制作更高效的算法时,我遇到了一些问题。

代码是这样的:

r_prev = [59,0,0]
r_load = [73,41,0]
r = [0,0,0]
zero_r = [0,0,0]
rows = 3
while rows != 0:
    position = 0
    for x in r_load:
        try:
            if r_prev[position] > r_prev[position-1]:
                r[position] = r_prev[position] + r_load[position]
            else:
                r[position] = r_prev[position-1] + r_load[position]
        except IndexError:
            r[position] = r_prev[position] + r_load[position]
        position += 1
    print r
    rows -= 1
    r_load = input("Enter next row")
    r_prev = r
    r_prev.append(0)
    zero_r.append(0)
    r = zero_r

它的工作原理是只保留最高路径的总和来达到一个点。我此时手动输入它(通过控制台)。当第一行被馈送时,它按预期执行,但是当馈送第二行时,它将r_prevr视为相同的事情,并且在r_prev上执行的每个操作也是在r上执行。

如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

执行r_prev = r时,您没有复制列表。您给同一个列表添加了一个名称。要制作副本,请执行r_prev = list(r)