无法从函数内就地修改 Python 列表
Unable to modify Python List in-place from within Function
我们有一个函数 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!
行:
nums = a + b
在 rotate
函数的范围内创建一个新的局部变量 nums
。要修改传入的列表,您可以将该行更改为以下内容:
nums[:] = a + b
您必须在列表中使用就地方法,例如del
和 extend
:
def rotate(nums, k):
a = nums[:-k]
del nums[:-k]
nums.extend(a)
我们有一个函数 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!
行:
nums = a + b
在 rotate
函数的范围内创建一个新的局部变量 nums
。要修改传入的列表,您可以将该行更改为以下内容:
nums[:] = a + b
您必须在列表中使用就地方法,例如del
和 extend
:
def rotate(nums, k):
a = nums[:-k]
del nums[:-k]
nums.extend(a)