如何在python中合并prev / next列表?

时间:2013-05-07 09:49:25

标签: python list merge

我列出了两个之前的 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中轻松实现吗?

2 个答案:

答案 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')]