循环并附加到列表

时间:2013-11-17 13:41:58

标签: python list loops while-loop

def makelist():
    list = []
    initial = [0, 100]
    a = 1
    while a <= 10:
        new_num = (initial[0] + initial[1])//2
        if new_num%2 == 0:
            initial[1] = new_num
        else:
            initial[0] = new_num
        list.append(initial)
        a += 1
    return list

为什么以上代码会返回:

[[43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44], [43, 44],  [43, 44], [43, 44]]

而不是:

[[0, 50], [25, 50], [37, 50], [43, 50], [43, 46], [43,44], [43, 44], [43, 44], [43, 44], [43, 44]]

即。连续的分裂而不是最后的分裂10次。

由于

1 个答案:

答案 0 :(得分:4)

首先,永远使用内置类型名称命名变量。在您的情况下list。而且你的程序没有按预期工作,因为

list.append(initial)

您一次又一次地将该引用附加到同一列表中。最后,列表中的所有元素都指向同一个列表initial。要解决此问题,您可以像这样创建initial的副本并附加

list.append(initial[:])

查看此图表https://www.lucidchart.com/documents/edit/43c8-0c30-5288c928-a4fe-105f0a00c875。这可能有助于您更好地理解。