基本上,我想做的是更新对我的主列表的递归调用中所做的更改。我尝试了以下操作,但是每次都会创建一个新列表,而忘记了母列表,而是返回了一个新的子列表。 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]
我只想将更改返回到主母列表,而不创建任何新列表。我该怎么办?
答案 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]