递归地将嵌套的元组解构为一个简单的连接列表

2024-10-06 11:56:00 发布

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

我认为我在将递归聚类算法的结果存储为嵌套元组时很聪明。数据存储ID之间的所有关系,如下所示:

((((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), ((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),
((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))), (((((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L))))), (((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), 
 (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L)))))), ((((((11162L, 9208L), (6992L, 5965L)), ((9208L, 11317L), (10834L, 11318L))), (((12705L, 12769L), (3825L, 7779L)), ((12334L, 12414L), (12769L, 7059L)))), ((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L))))), (((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L)))))))), ((((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L)))))), 
((((((10031L, 8445L), (6165L, 8329L)), ((8445L, 12689L), (10031L, 8445L))), (((5350L, 6189L), (7374L, 5782L)), ((8355L, 7054L), (6536L, 9380L)))), ((((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L))), (((8355L, 7054L), (6536L, 9380L)), ((9380L, 7698L), (6450L, 8876L))))), (((((7613L, 11184L), (11184L, 5673L)), ((8929L, 5318L), (8378L, 8929L))), (((10419L, 10235L), (6377L, 6439L)), ((8378L, 8929L), (5363L, 5910L)))), ((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L))))))), (((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), 
((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))), 
 ((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))))

我现在正试图将这个对象转换成一个边列表,以便用networkx可视化。所以每对ID都很容易连接——比如10500和11781。但是我还需要将每个嵌套连接到其父节点,所以(10500和11781)每个都需要一个到上层节点的边连接,该节点分支到该对和(38257779)。我是不是做错了?在

我找到的最好的模板是用来展平任何数据结构的。它至少有一些我理解的关于遍历对象的逻辑:

^{pr2}$

为了澄清这一点,每个上层都有一个由以前的层组成的ID。以下是6个级别,例如:

((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L))))))

(((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L)))))

((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L))))

(((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L)))

((9386L, 8168L), (8876L, 7622L))

(9386L, 8168L)

9386L

用这个小递归遍历器生成:

def pluck(data_in,out):
    if not isinstance(data_in[0], tuple):
        return out
    print data_in[0]
    out.append(data_in[0])
    pluck(data_in[0],out)

这样就清楚了吗?我不想要一个简单的列表-我是一个像树分形一样的连接成员的列表。建议?在

更新 有个好人发布了一个有用的函数,但它现在不见了,所以我重新发布了。好的部分是它将所有元组推送到一个元组列表中。糟糕的是networkx仍然无法连接最终映射中的所有成员:

def flatten(t, out):
    if isinstance(t[0], tuple):
        for p in t:
            flatten(p, out)
    else:
        out.append(t)
    return out

out = []
out = flatten(data,out)

Tags: 对象innetworkxid列表dataif节点
2条回答

这里有一个类似于@Bula的方法,但是它使用元组作为树中的“内部节点”。你可以随意重新贴标签。我没有画任何标签,所以你不会在这里看到它们。在

import networkx as nx
import uuid

tree = ((((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), ((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),
((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))), (((((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L))))), (((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))),
 (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L)))))), ((((((11162L, 9208L), (6992L, 5965L)), ((9208L, 11317L), (10834L, 11318L))), (((12705L, 12769L), (3825L, 7779L)), ((12334L, 12414L), (12769L, 7059L)))), ((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L))))), (((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L)))))))), ((((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L)))))),
((((((10031L, 8445L), (6165L, 8329L)), ((8445L, 12689L), (10031L, 8445L))), (((5350L, 6189L), (7374L, 5782L)), ((8355L, 7054L), (6536L, 9380L)))), ((((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L))), (((8355L, 7054L), (6536L, 9380L)), ((9380L, 7698L), (6450L, 8876L))))), (((((7613L, 11184L), (11184L, 5673L)), ((8929L, 5318L), (8378L, 8929L))), (((10419L, 10235L), (6377L, 6439L)), ((8378L, 8929L), (5363L, 5910L)))), ((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L))))))), (((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))),
((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),
 ((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))))

def add_edges(graph, tree):
    try:
        left,right = tree
    except TypeError:
        return
    graph.add_edge(tree,left)
    graph.add_edge(tree,right)
    add_edges(graph,left)
    add_edges(graph,right)

if __name__ == '__main__':
    import matplotlib.pyplot as plt
    graph = nx.Graph()
    add_edges(graph,tree)
    nx.draw(graph,node_size=10,with_labels=False)
# nicer layout with graphviz is you have it
#    nx.draw_graphviz(graph,node_size=10,with_labels=False)
    plt.show()
import networkx as nx
tree = (((((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), ((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L))))))), (((((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L))))), (((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))),  (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L)))))), ((((((11162L, 9208L), (6992L, 5965L)), ((9208L, 11317L), (10834L, 11318L))), (((12705L, 12769L), (3825L, 7779L)), ((12334L, 12414L), (12769L, 7059L)))), ((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L))))), (((((11318L, 10181L), (12334L, 12414L)), ((12292L, 11221L), (11221L, 9262L))), (((12721L, 961L), (11245L, 5132L)), ((12414L, 11245L), (12721L, 961L)))), ((((11248L, 12034L), (9972L, 11248L)), ((10948L, 12013L), (10823L, 5602L))), (((10839L, 10948L), (6673L, 10839L)), ((10729L, 9687L), (1300L, 12274L)))))))), ((((((((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))), (((8225L, 8804L), (8804L, 6369L)), ((8289L, 8953L), (8225L, 8804L)))), ((((9380L, 7698L), (6450L, 8876L)), ((9386L, 8168L), (8876L, 7622L))), (((9386L, 8168L), (8876L, 7622L)), ((6311L, 5727L), (7174L, 3611L))))), (((((9225L, 9777L), (6895L, 8167L)), ((10686L, 5395L), (12384L, 6816L))), (((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L)))), ((((9175L, 7918L), (6780L, 8004L)), ((6780L, 8004L), (10831L, 9175L))), (((6908L, 11020L), (10419L, 10235L)), ((11200L, 9756L), (11021L, 11462L)))))), ((((((10031L, 8445L), (6165L, 8329L)), ((8445L, 12689L), (10031L, 8445L))), (((5350L, 6189L), (7374L, 5782L)), ((8355L, 7054L), (6536L, 9380L)))), ((((5395L, 10211L), (10686L, 5395L)), ((10891L, 10127L), (6816L, 5622L))), (((8355L, 7054L), (6536L, 9380L)), ((9380L, 7698L), (6450L, 8876L))))), (((((7613L, 11184L), (11184L, 5673L)), ((8929L, 5318L), (8378L, 8929L))), (((10419L, 10235L), (6377L, 6439L)), ((8378L, 8929L), (5363L, 5910L)))), ((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L))))))), (((((((8953L, 3409L), (8334L, 7375L)), ((7375L, 7220L), (8420L, 8556L))), (((7375L, 7220L), (8420L, 8556L)), ((8420L, 8556L), (8556L, 10089L)))), ((((11021L, 11462L), (6778L, 6854L)), ((10691L, 6652L), (11061L, 11230L))), (((6652L, 5660L), (10691L, 6652L)), ((8390L, 6032L), (10984L, 11061L))))), (((((7406L, 11878L), (8398L, 7493L)), ((10419L, 10235L), (6377L, 6439L))), (((8367L, 6199L), (7263L, 7406L)), ((6199L, 7900L), (8367L, 6199L)))), ((((8667L, 9142L), (6491L, 7771L)), ((10391L, 8808L), (8667L, 9142L))), (((10391L, 8808L), (8667L, 9142L)), ((5882L, 9575L), (7008L, 6048L)))))), ((((((11087L, 9623L), (9013L, 9969L)), ((11294L, 9923L), (8390L, 6032L))), (((10656L, 11087L), (11087L, 9623L)), ((11087L, 9623L), (9013L, 9969L)))), ((((6590L, 10794L), (12483L, 6590L)), ((10794L, 8997L), (6590L, 10794L))), (((12386L, 12544L), (8196L, 11139L)), ((11266L, 11269L), (10751L, 12192L))))), (((((11266L, 11269L), (10751L, 12192L)), ((6905L, 8811L), (11180L, 9732L))), (((12338L, 12701L), (12474L, 12569L)), ((9948L, 10073L), (8577L, 10217L)))),  ((((8997L, 11091L), (11091L, 11210L)), ((10751L, 12192L), (12543L, 12143L))), (((961L, 12029L), (9262L, 11900L)), ((3825L, 7779L), (10500L, 11781L)))))))))


graph = nx.Graph()

def create_graph(id,tree,graph):
    if id!=0:
        parent = (id-1)/2
        graph.add_edge(parent,id)
    if isinstance(tree[0],tuple) and isinstance(tree[1],tuple):
        create_graph(id*2+1,tree[0],graph)
        create_graph(id*2+2,tree[1],graph)
    else:
        graph.add_edge(id,tree[0])
        graph.add_edge(id,tree[1])
        graph.add_edge(tree[0],tree[1])

create_graph(0,tree,graph)

相关问题 更多 >