如何处理列表中更复杂的标准排序/分组项?

时间:2017-01-14 21:57:10

标签: python algorithm

我偶然发现了一个在学习python的过程中遇到的问题 在我的例子中,我有一个填充了对象的列表(这些对象是可以单独访问的列表本身)

list_objects =[object5, object2, object4, object1, ojbject3, object6, object7, object8, object9]

每个对象都有指向另一个对象的函数:

  
      
  • INPUT0()
  •   
  • 输入1()
  •   
  • 输出()
  •   

某些物体可能碰巧彼此连接,例如它可能恰好是:

object5.input0() == object4 # object5 input points to object4

有时可能会发生一些对象连接到list_objects之外的其他对象:

object4.input0() == objectA

或者喜欢:

object4.input1() == objectM1

最后,可能会发生这样的情况:多个对象彼此连接(我会尽量用一些绘图来解释它):

objectA
   | # this is output of objectA
   |
   v # this is input0 of object4
object4 < # input1 of object 4 
   |      \
   |       -- objectM1
   v      /
object5 < # input1 of object 4
   |
   |
   v
objectB
   |
   |
   v
object1 <
   |     \
   |      \
   v       \
object2 <--- objectM2
   |       /
   |      /
   v     /
object3 <
   |
   |
   v
object6 <
   |     \
   |      \
   v       \
object8 <--- objectM3
   |       /|
   |      / |
   v     /  |
object7 <   |
   |       /
   |      /
   v     /
object9 <
   |
   |
   v
#(here is None or it goes on)

现在想要的结果是我以某种方式过滤list_objects中的对象,并且只得到彼此连接的第一个和最后一个对象:

new_list =[[object4, object5], [object1, object3], [object6, object9]]

这里的顺序很重要..我需要在列表中首先获得第一个对象,并在最后获得最后一个对象。

我希望我能够清楚地解释这个问题。

似乎我找不到好的解决方案,我已经尝试了双循环和while循环..但我想与此一起我将不得不多次运行以获得我需要的结果,它得到了用这些方法搞乱几次,经过一整天的努力,我放弃了。

谢谢

1 个答案:

答案 0 :(得分:0)

你手上有一张图表,我建议你把它当成一个。

第一个模型是一个无向图,并查找包含外部节点的周期。找到每个节点的最长周期。

然后查看有向图(几乎是图中的内容),找到每个周期要报告的两个节点。