在python3中使用递归来反转列表

问题描述 投票:0回答:1

为什么这段代码不能按预期工作? 我知道还有其他方法可以使用递归来反转列表 但我特别感兴趣的是为什么这个方法不起作用。

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]

python-3.x list recursion slice
1个回答
0
投票

使用

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))

© www.soinside.com 2019 - 2024. All rights reserved.