python – 给定完全由字符串元组列表表示的线性顺序,将顺序输出为字符串列表

给出形式[(a,b),……]的项目对,其中(a,b)表示a> 1. b,例如:

[('best','better'),('best','good'),('better','good')]

我想输出一个表单列表:

['best','better','good']

由于某种原因,这很难.有什么想法吗?

========================代码========================= ====

我知道为什么它不起作用.

def to_rank(raw):

  rank = []

  for u,v in raw:
    if u in rank and v in rank:
      pass

    elif u not in rank and v not in rank:
      rank = insert_front (u,v,rank)
      rank = insert_behind(v,u,rank)

    elif u in rank and v not in rank:
      rank = insert_behind(v,u,rank)

    elif u not in rank and v in rank:
      rank = insert_front(u,v,rank)

  return [[r] for r in rank]

# @Use: insert word u infront of word v in list of words
def insert_front(u,v,words):
  if words == []: return [u]
  else:
    head = words[0]
    tail = words[1:]
    if head == v: return [u] + words
    else        : return ([head] + insert_front(u,v,tail))

# @Use: insert word u behind word v in list of words
def insert_behind(u,v,words):
  words.reverse()
  words = insert_front(u,v,words)
  words.reverse()
  return words

===================更新===================

根据许多人的建议,这是一个直接的拓扑排序设置,我最终决定使用此源代码:algocoding.wordpress.com/2015/04/05/topological-sorting-python/

这解决了我的问题.

def go_topsort(graph):
in_degree = { u : 0 for u in graph }     # determine in-degree 
for u in graph:                          # of each node
    for v in graph[u]:
        in_degree[v] += 1

Q = deque()                 # collect nodes with zero in-degree
for u in in_degree:
    if in_degree[u] == 0:
        Q.appendleft(u)

L = []     # list for order of nodes

while Q:                
    u = Q.pop()          # choose node of zero in-degree
    L.append(u)          # and 'remove' it from graph
    for v in graph[u]:
        in_degree[v] -= 1
        if in_degree[v] == 0:
            Q.appendleft(v)

if len(L) == len(graph):
    return L
else:                    # if there is a cycle,  
    return []      

RockBilly的解决方案也适用于我的情况,因为在我的环境中,每个v

最佳答案 您正在寻找的是
topological sort.您可以使用深度优先搜索(我链接的wiki中包含的伪代码)在线性时间内执行此操作

点赞