我需要一个基于python中嵌套列表构建边的示例。
当前代码:
data = [257, [269, [325]],[4,''],[0,'']]
def iter(o, tree_types=(list, tuple)):
if isinstance(o, tree_types):
for value in o:
if isinstance(value, list):
for subvalue in iter(value, list):
yield subvalue
else:
yield value
else:
yield o
final_list = list(iter(data))
print('nfinal_list = {0}'.format(final_list))
edges = []
l = final_list
for first, second in zip(l, l[1:]):
edges.append((first, second))
print('nedges:{0}'.format(edges))
电流输出:final_list=[257269325,4,'',0,'']边缘=[(257269),(269325),(3254),(4,''),('',0),(0,'')]
期望输出:
edges = [(257, 269), (269, 325), (257, 4), (4, ''), (257,0), (0, '')]
问题的一部分是,您已经将(列表)列表扁平化,因此不再知道哪些节点与哪些节点相连。CCD_ 1的使用假设它们以某种方式成对排列。
如果迭代器生成一对源节点和目标节点或接收节点,则可以保留这一点。
你没有使用tree_types
,所以如果没有它,这对你的输入有效:
def iter(o):
source = o[0]
for subgraph in o[1:]:
if isinstance(subgraph, list):
yield from iter(subgraph)
sink = subgraph[0]
if isinstance(sink, list):
yield (source, sink[0])
else:
yield (source, sink)
else:
yield (source, subgraph)
这有一些假设。。。例如,数据不是空的,第一项是单个节点。