Python 如何为族树创建列表列表

Python 如何为族树创建列表列表,python,list,Python,List,python新手。正在学习创建生成列表列表的函数。。。例如,可以表示家谱的东西。以下是我的想法: def familytree(root): many = int(input('How many children does "' + root[0] + '" have? ')) if many > 0: root.append([[] for y in range(many)]) z = root[1]

python新手。正在学习创建生成列表列表的函数。。。例如,可以表示家谱的东西。以下是我的想法:

def familytree(root):
        many = int(input('How many children does "' + root[0] + '" have? '))
        if many > 0:
            root.append([[] for y in range(many)])
            z = root[1]
            for j in range(many):
                name = [input("Give name of one of " + root[0] + "'s children?")]
                z[j] = name
                familytree(name)
        print(root)
似乎有用

['A', [['B', [['D', [['G'], ['H']]], ['E', [['I']]]]], ['C', [['F', [['J'], ['K']]]]]]]
。。。但结果不需要括号和打印输出

有没有更好的实施建议


下一步将处理类结构。

以下是如何仅打印最终结果。我还简化了一些其他的东西,使它更清晰一些

def familytree(root):
    many = int(input('How many children does "' + root[0] + '" have? '))
    if many > 0:
        z = []
        root.append(z)
        for j in range(many):
            name = [input("Give name of one of " + root[0] + "'s children?")]
            z.append(name)
            familytree(name)


root = ['A']
familytree(root)
print(root)

以下是您只能打印最终结果的方式。我还简化了一些其他的东西,使它更清晰一些

def familytree(root):
    many = int(input('How many children does "' + root[0] + '" have? '))
    if many > 0:
        z = []
        root.append(z)
        for j in range(many):
            name = [input("Give name of one of " + root[0] + "'s children?")]
            z.append(name)
            familytree(name)


root = ['A']
familytree(root)
print(root)

一种不破坏代码的简单方法:

root = ['A']
def familytree(root):
    many = int(input('How many children does "' + root[0] + '" have? '))
    if many > 0:
        root.extend([] for y in range(many))
        for j in root[1:]: 
            name = input("Give name of one of " + root[0] + "'s children? ")
            j.append(name)
            familytree(j)

print(familytree(root)) 

您还可以使用内置库漂亮地打印对象

一种更简单的方法,而不破坏代码:

root = ['A']
def familytree(root):
    many = int(input('How many children does "' + root[0] + '" have? '))
    if many > 0:
        root.extend([] for y in range(many))
        for j in root[1:]: 
            name = input("Give name of one of " + root[0] + "'s children? ")
            j.append(name)
            familytree(j)

print(familytree(root)) 

您还可以使用内置库漂亮地打印对象

请使用代码缩进进行重构。您的意思是要更改列表的打印方式吗?不是。除了上面输入的最终结果之外,该函数还打印许多中间步骤。例如:['f'、['j']、['k']]['c'、[['f'、['j']、['k']].['k']]预期的输出是什么样的
A
有4个孩子,我给它取了一个名字
B
。。。然后呢?有多少代人,一代人该怎么填?您如何在一个列表中表示
B
的后代,该列表将他分类为与
C、D、E
同一代的一部分,他们有自己独特的后代?该函数要求您以深度优先的方式分别为每个孩子命名。你可以随心所欲地代代相传。例如,如果根[“A”]有2个子项(名为B&C),则B有1个子项(名为D),C有2个子项(名为E&F)。。。当提示您输入名称时,您将按以下顺序依次添加名称:根A-->B-->D-->C-->E-->F。(注意:此示例与我的原始帖子不同)请使用代码缩进进行重构。您的意思是要更改列表的打印方式吗?实际上不是。除了上面输入的最终结果之外,该函数还打印许多中间步骤。例如:['f'、['j']、['k']]['c'、[['f'、['j']、['k']].['k']]预期的输出是什么样的
A
有4个孩子,我给它取了一个名字
B
。。。然后呢?有多少代人,一代人该怎么填?您如何在一个列表中表示
B
的后代,该列表将他分类为与
C、D、E
同一代的一部分,他们有自己独特的后代?该函数要求您以深度优先的方式分别为每个孩子命名。你可以随心所欲地代代相传。例如,如果根[“A”]有2个子项(名为B&C),则B有1个子项(名为D),C有2个子项(名为E&F)。。。当提示输入名称时,您将按以下顺序依次添加它们:根A-->B-->D-->C-->E-->F。(注意:此示例与我原来的文章不同)