首页 > 解决方案 > Python在函数内切片列表

问题描述

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

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 列表上实现快速排序,并意识到我需要在函数中使用赋值语句。即以下代码输出正确的结果。

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

标签: pythonlistslice

解决方案


推荐阅读