从递归函数返回的列表始终为空
list returned from recursive function always empty
我正在尝试 return 来自递归函数的列表,为每个深度附加到此列表,但最终 returned 列表始终为空。
我不是很有经验的 pythonian,所以这可能是一个微不足道的错误。
代码如下:
import pymel.core as pm
def getParent(jnt):
something = pm.listRelatives(jnt, parent=True);
if something:
print 'got parent: ' + something[0]
return something[0]
else:
return None
def getAllParents(jnt):
parents = []
parents.append(jnt)
prnt = getParent(jnt)
if prnt == None:
return parents
else:
prnts = parents.insert(0, getAllParents(prnt))
return prnts
selection = pm.ls(sl=True)[0]
parents = getAllParents(selection)
print '\n'
print parents
pm.listRelatives(jnt, parent=True);
returns 一个字符串列表,如果它不为空,我会抓住第一个。
这是输出:
got parent: joint3
got parent: joint2
got parent: joint1
None
感谢任何帮助。
请记住,您正在使用列表函数,例如 append
、insert
传递列表。在这种情况下,您最终会得到奇怪的结果。
例如
a = [1, 2, 3]
b = [4, 5]
print(a.append(b))
>> [1, 2, 3, [4, 5]]
这里:
def getAllParents(jnt):
# ...
prnts = parents.insert(0, getAllParents(prnt))
return prnts
list.insert()
(以及所有就地修改列表的方法 - sort()
等)returns None
。你想要:
parents.insert(0, getAllParents(prnt))
return parents
相反。
您的 getAllParents
方法接受一个字符串和 returns 一个列表。然后将此列表插入另一个列表,使其成为字符串列表以及字符串列表和列表...
要连接两个列表,您可以简单地使用 +
运算符,因此:
prnts = getAllParents(prnt) + parents
我不知道 python 但我想下面的代码可以正常工作
listPrts = ["","toto","idiot","happy"]
def getParent(jnt):
something = listPrts
del listPrts[0]
if something:
print 'got parent: ' + something[0]
return something[0]
else:
return None
def getAllParents(jnt):
parents = []
parents.append(jnt)
prnt = getParent(jnt)
if prnt == None:
return parents
else:
prnts = parents.insert(0, getAllParents(prnt))
return parents
selection = "childof"
parents = getAllParents(selection)
print '\n'
print parents
我正在尝试 return 来自递归函数的列表,为每个深度附加到此列表,但最终 returned 列表始终为空。 我不是很有经验的 pythonian,所以这可能是一个微不足道的错误。
代码如下:
import pymel.core as pm
def getParent(jnt):
something = pm.listRelatives(jnt, parent=True);
if something:
print 'got parent: ' + something[0]
return something[0]
else:
return None
def getAllParents(jnt):
parents = []
parents.append(jnt)
prnt = getParent(jnt)
if prnt == None:
return parents
else:
prnts = parents.insert(0, getAllParents(prnt))
return prnts
selection = pm.ls(sl=True)[0]
parents = getAllParents(selection)
print '\n'
print parents
pm.listRelatives(jnt, parent=True);
returns 一个字符串列表,如果它不为空,我会抓住第一个。
这是输出:
got parent: joint3
got parent: joint2
got parent: joint1
None
感谢任何帮助。
请记住,您正在使用列表函数,例如 append
、insert
传递列表。在这种情况下,您最终会得到奇怪的结果。
例如
a = [1, 2, 3]
b = [4, 5]
print(a.append(b))
>> [1, 2, 3, [4, 5]]
这里:
def getAllParents(jnt):
# ...
prnts = parents.insert(0, getAllParents(prnt))
return prnts
list.insert()
(以及所有就地修改列表的方法 - sort()
等)returns None
。你想要:
parents.insert(0, getAllParents(prnt))
return parents
相反。
您的 getAllParents
方法接受一个字符串和 returns 一个列表。然后将此列表插入另一个列表,使其成为字符串列表以及字符串列表和列表...
要连接两个列表,您可以简单地使用 +
运算符,因此:
prnts = getAllParents(prnt) + parents
我不知道 python 但我想下面的代码可以正常工作
listPrts = ["","toto","idiot","happy"]
def getParent(jnt):
something = listPrts
del listPrts[0]
if something:
print 'got parent: ' + something[0]
return something[0]
else:
return None
def getAllParents(jnt):
parents = []
parents.append(jnt)
prnt = getParent(jnt)
if prnt == None:
return parents
else:
prnts = parents.insert(0, getAllParents(prnt))
return parents
selection = "childof"
parents = getAllParents(selection)
print '\n'
print parents