递归函数返回的列表始终为空

2024-04-28 19:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图从一个递归函数返回一个列表,每一个深度都会附加到这个列表中,但是最终返回的列表总是空的。 我不是很有经验的Python,所以这可能是个小错误。在

代码如下:

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);返回一个字符串列表,如果不为空,我将获取其中的第一个字符串。在

输出如下:

^{pr2}$

感谢任何帮助。在


Tags: true列表returnifdefsomethingparentprint
3条回答

这里:

def getAllParents(jnt):
    # ...
    prnts = parents.insert(0, getAllParents(prnt))
    return prnts

list.insert()(以及所有就地修改列表的方法-sort()等)返回None。你想要:

^{pr2}$

相反。在

请记住,您使用的是列表函数,如appendinsert传递列表。在这种情况下,你会得到奇怪的结果。 例如

a = [1, 2, 3]
b = [4, 5]
print(a.append(b))

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

您的getAllParents方法接受一个字符串并返回一个列表。然后将这个列表插入另一个列表,使其成为字符串列表和字符串列表。。。在

要连接两个列表,只需使用+运算符,因此:

prnts = getAllParents(prnt) + parents

相关问题 更多 >