在尝试实现算法时,我无法通过函数更改python列表。在阅读了该问题之后,this StackOverflow answer建议我使用[:]来改变在函数argumemt中传递的数组。

但是,如下面的代码片段所示,尝试对列表l进行突变时,问题仍然存在。我期望输出为Before: [1,2,3,4]After: [69, 69, 69, 69],但取而代之的是我取回l的原始值,如下所示。

def mutate_list(a, b):
    c = [69] * 4
    a[:] = c[:2]  # changed the elements, but array's still unchanged outside function
    b[:] = c[2:]

if __name__ == '__main__':
    l = [1, 2, 3, 4]
    print("Before: {}" .format(l))
    mutate_list(l[:2], l[2:])
    print("After: {}" .format(l))


输出:

Before: [1, 2, 3, 4]
After : [1, 2, 3, 4]


为什么会这样?

最佳答案

错误是您实际上没有传递l而是传递了它的两个切片。您应该更改它,例如:

def mutate_list(a):
    c = [69] * 4
    a[:2] = c[:2]
    a[2:] = c[2:]

if __name__ == '__main__':
    l = [1, 2, 3, 4]
    print("Before: {}" .format(l))
    mutate_list(l)
    print("After: {}" .format(l))

关于python - 元素更改后,列表不变,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59675923/

10-10 14:24