【问题标题】:Looping and appending to a list循环并附加到列表
【发布时间】:2013-11-30 15:11:53
【问题描述】:
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 倍。

谢谢

【问题讨论】:

  • 您应该熟悉使用的任何 IDE 中的标准调试器。很有帮助!

标签: python list loops while-loop


【解决方案1】:

首先,永远不要使用内置类型名称命名您的变量。在你的情况下list。而且您的程序无法按预期运行,因为

list.append(initial)

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

list.append(initial[:])

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

【讨论】:

  • 但是列表“初始”不是在每次循环遍历时都在改变吗?
  • @user2850514 正确。但是所有的元素都只指向initial。因此,在循环结束时,initial 拥有的将是列表中所有元素的值。
  • @user2850514 看看这个lucidchart.com/documents/edit/…
猜你喜欢
  • 2019-04-13
  • 2014-01-11
  • 2022-07-06
  • 1970-01-01
  • 2017-05-30
  • 1970-01-01
  • 1970-01-01
  • 2021-10-31
相关资源
最近更新 更多