Skip to main content
 首页 » 编程设计

python之通过迭代列表追加项目

2025年05月04日9zdz8207

我设计了一个函数,它接受一个列表作为参数并返回另一个列表。

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.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 方法。