lst = [(u'course', u'session'), (u'instructor', u'session'), (u'session', u'trainee'), (u'person', u'trainee'), (u'person', u'instructor'), (u'course', u'instructor')]
我上面是元组列表,我需要用以下逻辑对它进行排序….
每个元组的第二个元素依赖于第一个元素,例如(课程,课程) – >会话取决于课程等等..
我想要一个基于其依赖的优先级的排序列表,较少或独立的对象将首先出现,因此输出应如下所示,
lst = [course, person, instructor, session, trainee]
解决方法:
你正在寻找所谓的topological sort.*页面显示了它的经典Kahn和深度优先搜索算法; Python示例是here(有点过时,但应该运行正常),在pypi(稳定且可重用 – 您还可以在线阅读代码here)和here(Tarjan的算法,这种类型也处理依赖项中的循环)指定),仅举几例.