如何处理更复杂的条件对列表中的项目进行排序/分组?

2024-06-28 18:57:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我在学习python时偶然发现了一个我正在努力解决的问题 在我的示例中,我有一个填充了对象的列表(这些对象本身就是可以单独访问的列表)

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

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

  • input0()
  • input1()
  • output()

某些对象可能碰巧相互连接,例如:

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]]

这里的顺序很重要。。我需要在列表中首先获取第一个对象,最后一个对象位于最后,如图所示

我希望我把问题解释得足够清楚

似乎我找不到很好的解决方案,我尝试了双for循环和while循环。。但我认为,要实现这一点,我必须反复运行多次,才能得到我所需要的结果。这些方法导致了几次混乱,经过一整天的尝试,我放弃了

多谢各位


Tags: of对象列表objectsislistobjectaobject1
1条回答
网友
1楼 · 发布于 2024-06-28 18:57:30

你手上有一张图表,我建议你把它当作一张

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

然后查看有向图(与图形中的图基本相同),以找到每个循环要报告的两个节点

相关问题 更多 >