我列出了两个之前的和 next 项目。
[['Robert','Christopher'],['John','Eric'],['Mark','John'],['Mickael','Robert']]
对于第一个列表,'Robert'是上一个和'Christopher' next 。
我想通过保持最终列表的连续性来合并具有最低之前和最高 next 的它们。 结果可以是:
[['Mickael','Christopher'],['Mark','Eric']]
或
[['Mark','Eric'],['Mickael','Christopher']]
结果是两个列表,因为这两个列表之间没有连续性。 上一个和 next 无法排序(例如'Mickael'在'Christopher'之前)。没有循环也没有重复的元素(即'Robert'总是在'Christopher'之前,'John'总是在'Eric'之前......)所以这是一个拓扑图
可以在python中轻松实现吗?
答案 0 :(得分:1)
我认为这会有效,而且非常有效:
items = [['A','B'], ['B','C'], ['C','E'], ['E','F'], ['F','G']]
nodes = dict(items)
changed = True
while changed:
changed = False
keys = nodes.keys()
for prevEl in keys:
if not prevEl in nodes: #may have been deleted
continue
nextEl = nodes[prevEl]
if nextEl in nodes:
tmp = nodes[nextEl]
del nodes[nextEl]
nodes[prevEl] = tmp
changed = True
答案 1 :(得分:0)
根据How can I order a list of connections Ashwini Chaudhary的链接(thx Ashwini),我写了一个符合我需求的解决方案:
items= [['F','G'], ['B','C'], ['A','B'], ['C','D'], ['E','F']]
mydict = dict(items)
for prev,next in items:
if next in mydict:
mydict[prev] = mydict[next]
del mydict[next]
print(list(mydict.items()))
结果是:
[('A', 'D'), ('E', 'G')]