为什么这段代码不能按预期工作? 我知道还有其他方法可以使用递归来反转列表 但我特别感兴趣的是为什么这个方法不起作用。
def reverse(nums):
if len(nums) < 2:
return
nums[0], nums[-1] = nums[-1], nums[0]
reverse(nums[1:-1])
A = [1, 2, 3, 4, 5, 6]
reverse(A)
print(A)
我期待输出
[6 5 4 3 2 1]
。
使用
reverse(nums[1:-1])
创建子列表的副本,然后“反转”该子列表,而不更改原始列表(第一个和最后一个元素除外)。相反,您应该将原始列表与下一个要更改的索引一起传递,例如像这样的东西:
def reverse(nums, i=0):
if i >= len(nums) // 2:
return
nums[i], nums[-1-i] = nums[-1-i], nums[i]
reverse(nums, i+1)
当然,对于所有实际应用,您应该使用带有负步长的切片
A = A[::-1]
或内置函数 A = list(reversed(A))
。