我们可以在函数内就地更改列表的值吗?以下两段代码让我感到困惑。
def change_list(a):
a[0], a[1] = a[1], a[0]
return
a = [1, 2]
change_list(a)
a # this will output [2, 1]
上面的此函数只是交换列表的第一个和第二个元素。
但是,当我将此函数包装在另一个函数中,并尝试通过在两个子列表上调用change_list
函数两次来更改较长列表的值时,该更改不再就地进行。
def change_parts_of_list(longer_a):
change_list(longer_a[0:2])
change_list(longer_a[2:4])
return
longer_a = [1, 2, 3, 4]
change_parts_of_list(longer_a)
longer_a # this will return [1, 2, 3, 4]
第二个函数为什么不返回[2,1,4,3]?
谢谢!关于这一点的一些背景-我试图在Python列表上实现quicksort,并意识到我需要在函数内部分配赋值语句。即以下代码输出正确的结果。
def change_list_modified(a):
a[0], a[1] = a[1], a[0]
return a
def change_parts_of_list_modified(longer_a):
longer_a[0:2] = change_list(longer_a[0:2])
longer_a[2:4] = change_list(longer_a[2:4])
return longer_a
longer_a = [1, 2, 3, 4]
change_parts_of_list(longer_a)
longer_a