gpt4 book ai didi

Python 递归列表( pop 与 [ ] )

转载 作者:太空宇宙 更新时间:2023-11-04 10:25:27 26 4
gpt4 key购买 nike

我正在研究递归,我遇到了一个我已经解决的问题,但我想知道发生了什么以及为什么我首先尝试的方法不起作用。我遇到的唯一问题是在长度为 3 时清空 listOfX。

这是无法按预期工作的原始代码:

sol = []
def recLoop(levelWidth,levelOn,listOfX):
if len(listOfX) == 3:
sol.append([listOfX[0],listOfX[1]])
sol.append([listOfX[0],listOfX[2]])
listOfX = [] #THIS DOES NOT WORK

print listOfX
if len(levelWidth) != levelOn:
for x in range(levelWidth[levelOn]):
listOfX.append(x)
recLoop(levelWidth,levelOn+1,listOfX)

recLoop([3,2],0,[])
print sol

但是当我像这样使用 pop() 时它会按预期工作:

sol = []
def recLoop(levelWidth,levelOn,listOfX):
if len(listOfX) == 3:
sol.append([listOfX[0],listOfX[1]])
sol.append([listOfX[0],listOfX[2]])
listOfX.pop()
listOfX.pop()
listOfX.pop()

print listOfX
if len(levelWidth) != levelOn:
for x in range(levelWidth[levelOn]):
listOfX.append(x)
recLoop(levelWidth,levelOn+1,listOfX)

recLoop([3,2],0,[])
print sol

注意:第一个代码的结果是:

[[0, 0], [0, 1]]

但它应该是:

[[0, 0], [0, 1], [1, 0], [1, 1], [2, 0], [2, 1]]

最佳答案

声明:

listOfX = []

只是将局部变量(只是对对象的引用)重新绑定(bind)到一个新列表。原始列表对象仍在别处引用,但不受此重新绑定(bind)的影响。另一方面,使用 listOfX.pop() 直接操作该对象。

您可以使用:

listOfX[:] = []

改为清除列表。

关于Python 递归列表( pop 与 [ ] ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29577120/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com