递归函数中全局变量重新修改/python
Global variable re-changes in recursive function / python
我正在尝试在 Python 中使用递归函数。即使我可以使用修饰符更改全局值的值,它也会在该修饰符更改时重新更改。
这是代码方案;
array = [1,2,3]
middle_array = []
last_array = []
def recursive_array(in_array):
global last_array
global middle_array
for rank in range(0, len(in_array)):
if len(in_array) == 0:
last_array.append(middle_array)
return last_array
elif len(in_array) == 1:
middle_array.append(in_array[0])
last_array.append(middle_array)
return last_array
middle_array.append(in_array[rank])
bottom = rank -1
top = rank +2
if bottom <= 0:
bottom = 0
if top >= len(in_array):
top = len(in_array)
changable_array = in_array[top:]
recursive_array(changable_array)
last_array.append(middle_array)
middle_array.pop()
return last_array
第一个 "recursive_array" 循环从 [1,2,3] "in_array" 开始。
"middle_array" 采用正确的 append() 命令和程序执行正确的 "changeable_array" 作为 [3]。
递归的第一次调用带有 "in_array" 作为 [3] 所以转到 "elif len(in_array) == 1:" 命令。更新正确完成。现在,middle_array 是 [1,3] 并且 last_array 是 [1,3] 然后返回添加最后一个附加到 last_array 作为 [[1,3],[1,3] ].
elif len(in_array) == 1:
middle_array.append(in_array[0])
last_array.append(middle_array)
此后,命令 "middle_array.pop()" 命令删除数组的最后一个元素。但是,这是我的问题;当 middle_array 弹出时,"last_array" 值也会弹出。
recursive_array(changable_array)
last_array.append(middle_array)
middle_array.pop()
弹出前;
last_array = [[1,3],[1,3]]
middle_array = [1,3]
弹出后;
last_array = [[1],[1]]
middle_array = [1]
我想弹出 middle_array 中的值,但保留 last_array 中的值。你能告诉我路径吗?
感谢您抽出宝贵时间和关注。
I want to pop the value in middle_array but keep the values in the last_array
每当你追加 middle_array (我能看到的两个地方)追加一个副本:
last_array.append(middle_array.copy())
我正在尝试在 Python 中使用递归函数。即使我可以使用修饰符更改全局值的值,它也会在该修饰符更改时重新更改。
这是代码方案;
array = [1,2,3]
middle_array = []
last_array = []
def recursive_array(in_array):
global last_array
global middle_array
for rank in range(0, len(in_array)):
if len(in_array) == 0:
last_array.append(middle_array)
return last_array
elif len(in_array) == 1:
middle_array.append(in_array[0])
last_array.append(middle_array)
return last_array
middle_array.append(in_array[rank])
bottom = rank -1
top = rank +2
if bottom <= 0:
bottom = 0
if top >= len(in_array):
top = len(in_array)
changable_array = in_array[top:]
recursive_array(changable_array)
last_array.append(middle_array)
middle_array.pop()
return last_array
第一个 "recursive_array" 循环从 [1,2,3] "in_array" 开始。 "middle_array" 采用正确的 append() 命令和程序执行正确的 "changeable_array" 作为 [3]。
递归的第一次调用带有 "in_array" 作为 [3] 所以转到 "elif len(in_array) == 1:" 命令。更新正确完成。现在,middle_array 是 [1,3] 并且 last_array 是 [1,3] 然后返回添加最后一个附加到 last_array 作为 [[1,3],[1,3] ].
elif len(in_array) == 1:
middle_array.append(in_array[0])
last_array.append(middle_array)
此后,命令 "middle_array.pop()" 命令删除数组的最后一个元素。但是,这是我的问题;当 middle_array 弹出时,"last_array" 值也会弹出。
recursive_array(changable_array)
last_array.append(middle_array)
middle_array.pop()
弹出前;
last_array = [[1,3],[1,3]] middle_array = [1,3]
弹出后;
last_array = [[1],[1]] middle_array = [1]
我想弹出 middle_array 中的值,但保留 last_array 中的值。你能告诉我路径吗? 感谢您抽出宝贵时间和关注。
I want to pop the value in middle_array but keep the values in the last_array
每当你追加 middle_array (我能看到的两个地方)追加一个副本:
last_array.append(middle_array.copy())