无法从Function内部就地修改Python列表

时间:2019-04-15 17:44:28

标签: python python-3.x in-place

我们有一个函数rotate(),它使用一个列表nums并就地对其进行修改。但是,在rotate()函数调用之后,我无法获得正确修改的列表。

为什么会这样?

def rotate(nums, k):
    """
    Rotate the list to the right by k steps
    Do not return anything, modify nums in-place instead.
    """

    # Reverse
    nums.reverse()
    a = nums[:k]
    a.reverse()
    b = nums[-(len(nums)-k):]
    b.reverse()
    nums = a + b
    print('Inside function:', nums)

nums = [1,2,3,4,5,6]
rotate(nums, 3)
print('Outside function: ', nums)      

输出

Inside function: [4, 5, 6, 1, 2, 3]
Outside function:  [6, 5, 4, 3, 2, 1]   <--- incorrect!

2 个答案:

答案 0 :(得分:2)

该行:

nums = a + b

nums函数范围内创建一个新的局部变量rotate。要修改传入的列表,可以将该行更改为以下内容:

nums[:] = a + b

答案 1 :(得分:1)

您必须在列表中使用就地方法,例如delextend

def rotate(nums, k):
    a = nums[:-k]
    del nums[:-k]
    nums.extend(a)