递归地将元组的嵌套元组分解为连接的平面列表



我认为我很聪明地将递归聚类算法的结果存储为嵌套元组的嵌套。数据存储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)。我做错了吗?

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

def flatten(l, ltypes=(list, tuple)):
""" stolen from http://rightfootin.blogspot.com/2006/09/more-on-python-flatten.html
AKA  Mike C. Fletcher's BasicTypes library"""
ltype = type(l)
l = list(l)
i = 0
while i < len(l):
while isinstance(l[i], ltypes):
if not l[i]:
l.pop(i)
i -= 1
break
else:
l[i:i + 1] = l[i]
i += 1
return ltype(l)

为了澄清,每个上层都有一个由以前的层组成的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

用这个小递归walker生成:

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)

这能解决问题吗?我不想要一个平面列表——我是一个像树分形一样的连接成员列表。建议?

UPDATE一些好心人发布了一个有用的功能,它有点起作用,但现在SO中缺少了它,所以我转发了它。好的部分是它将所有元组推送到一个元组列表中。糟糕的是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)
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)

这里有一个类似于@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()

最新更新