通过迭代列表追加项目

Appending Items by Iterating list

我设计了一个以下函数,它将一个列表作为参数,returns 另一个列表。

def function(list):
    A = []
    B = []
    for num in list:
        A.append(num)
        B.append(A)
    return B

在这个函数中,我假设函数会根据 A 的当前状态将 A 附加到 A。在该假设下工作。我调用了函数

>>> test([1,2,3,4,5])

预期输出为

[[1], [1, 2], [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5]]

然而,我得到的结果是

[[1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5], [1, 2, 3, 4, 5]]

这是为什么?这个问题有解决办法吗?

您可以将 A 的副本附加到 B 以避免使用 A 的相同引用:

for num in list:
      A.append(num)
      B.append(A[:])

您需要按值复制它。在您目前的情况下,您正在通过参考。因此,每个索引都会随着 A 的变化而更新。应该是:

    B.append(A[:])

注意 [:] 按值复制。

为了澄清,running your code here 我们可以检查在 [1,2] 上调用 function 的结果:

现在,考虑一下复制时会发生什么:

def function(list):
    A = []
    B = []
    for num in list:
        A.append(num)
        B.append(A[:])
    return B

print function([1,2])

另外,作为旁注:您应该更改变量的名称。例如,通过将参数声明为 list 可以隐藏 list 方法。

列表通过引用传递。要复制它们,请使用语法 B.append(A[:])

def function(list):
    A = []
    B = []
    for num in list:
        A.append(num)
        B.append(A[:])
    return B

在您的代码中,您发送的是引用而不是数据。

工作代码

def function(list):
   A = []
   B = []
   for num in list:
      A.append(num)
      B.append(A[:])
   return B