如何更新对Python的递归函数所做的列表所做的更改?

时间:2019-08-28 23:12:21

标签: python list recursion

基本上,我想做的是更新对我的主列表的递归调用中所做的更改。我尝试了以下操作,但是每次都会创建一个新列表,而忘记了母列表,而是返回了一个新的子列表。 Lemmi用基本代码解释:

def woah(arr):
    if len(arr) > 1:
        arr[-1], arr[0] = arr[0], arr[-1]
        print(arr) //to keep track of changes
        return woah(arr[:-1])

woah([2, 3, 4, 5, 6])

>> [6, 3, 4, 5, 2]
   [5, 3, 4, 6]
   [4, 3, 5]
   [3, 4]

我希望它最终返回:

  
    

输出:[3、4、5、6、2]

  

我认为应该进行内部更改以达到所需的输出:

  
    

[2、3、4、5、6]-> [6、3、4、5、2]-> [5、3、4、6、2]-> [4、3, 5,6,2]-> [3,4,5,6,2]

  

我只想将更改返回到主母列表,而不创建任何新列表。我该怎么办?

3 个答案:

答案 0 :(得分:1)

有一点变化:

def woah(arr, l):
    if l > 1:
        arr[l-1], arr[0] = arr[0], arr[l-1]
        print(arr) # to keep track of changes
        return woah(arr, l-1)

    return arr

arr = [2, 3 ,4, 5 , 6]
woah(arr, len(arr)) # arr will be changed, and you can also accept the return value

更好的方法是定义一个内部函数,因此您只需传递arr。留给你:-)

答案 1 :(得分:1)

由于每次传递的列表都较短,因此列表越来越短。 此工作应:

def woah(arr, fixed):
    if len(arr) > 1:
        arr[-1], arr[0] = arr[0], arr[-1]
        print(arr+fixed) #to keep track of changes
        return woah(arr[:-1],[arr[-1]]+fixed)

woah([2, 3, 4, 5, 6], [])

答案 2 :(得分:1)

当您执行return woah(arr[:-1])时,将省略最后一个元素,这不是您想要的。试试这样的东西

def woah(arr, n=1): 
    if len(arr) > n:
        arr[-n], arr[0] = arr[0], arr[-n]
        print(arr)
        return woah(arr, n+1)
    else:
        return arr

woah([2, 3, 4, 5, 6])

输出

[6, 3, 4, 5, 2]
[5, 3, 4, 6, 2]
[4, 3, 5, 6, 2]
[3, 4, 5, 6, 2]