Невозможно изменить список Python на месте из функции - PullRequest
0 голосов
/ 15 апреля 2019

У нас есть функция 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 ]

2 голосов
/ 15 апреля 2019

Строка:

nums = a + b

Создает новую локальную переменную nums в области действия вашей функции rotate.Чтобы изменить переданный список, вы можете изменить эту строку следующим образом:

nums[:] = a + b
1 голос
/ 15 апреля 2019

Вы должны использовать inplace-методы в вашем списке, например, del и extend:

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