在尝试实现算法时,我无法通过函数更改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/