函数内的Python切片列表

时间:2018-08-25 19:30:11

标签: python list slice

我们可以在函数内就地更改列表的值吗?以下两段代码让我感到困惑。

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

0 个答案:

没有答案