【问题标题】:Getting conditional merged list of disjoint lists in python在python中获取不相交列表的条件合并列表
【发布时间】:2017-05-29 10:31:00
【问题描述】:

给定一组 I={0,1,2,3,4},我的代码生成可行的最优路线,结果如下所示:x[0,2]=1 , x[2,4]=1, x[4,3]=1 (表示从节点 0 到节点 2,然后从 2 到 4,然后从 4到 3) 和剩余的 x[i,j]=0 ( x[0,1]=0 ,x[0,3]=0 , x[2,3]=0,.. .).

我需要一个单一列表,如下所示:FinalRoute=[0,2,4,3],它在单一列表中显示相同的概念。 p>

我尝试将 x[i,j]=1 的 X 附加到 FinalRoute,但我无法确定访问节点的顺序。有没有办法通过按访问顺序附加 x[i,j]s 来创建单个列表(FinalRoute)?

【问题讨论】:

  • 嗯? ..........
  • 嗯? x2 .......
  • 我觉得我不能把问题解释清楚!我想要一个类似 [0,2,4,3] 的列表(意味着按顺序访问节点 0,2,4 和 3),因为我手头有以下列表: x[0,1]=0 , x [0,2]=1, x[0,3]=0 , x[0,4]=0 , x[1,2]=0, x[1,3]=0 和 x[ 1,4]=0 , x[2,1]=0 ,x[2,3]=0 , x[2,4]=1 , x[3,1]=0 , x[3,2]=0, x[3,4]=0 。 x[4,1]=0 , x[4,2]=0 ,x[4,3]=1
  • 这意味着,只要 x[i,j]=1 然后将 i 和 j 添加到单个列表中(但保留访问顺序!)

标签: python list cplex gurobi


【解决方案1】:

不确定 python 中的 x[0, 2] 是什么,但假设你有一个二维列表, 您将值引用为 x[0][2],而不是 x[0, 2] 和 x[0][2] == 1 表示您从 node0 转到 node2,这是一个可能的解决方案:

matrix = [[0, 0, 1, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 0, 1, 0]]

path = []
node = 0
while node is not None:
    path.append(node)
    node = matrix[node].index(1) if 1 in matrix[node] else None

print(path)

【讨论】:

  • 谢谢乔。这似乎是一种明智的做法;但是,您通过观察创建了矩阵(很可能)。如何自动创建类似矩阵的列表?
  • 我不明白你在问什么。我的矩阵只是一个例子,我假设你的代码会产生类似的东西,然后你的问题是如何通过矩阵来获得路径,我给了你答案。如果这不是您所需要的,那么请更准确地指定您需要的内容,最好是在示例中。
猜你喜欢
  • 1970-01-01
  • 2018-02-02
  • 1970-01-01
  • 2017-10-31
  • 1970-01-01
  • 1970-01-01
  • 2014-03-07
  • 2015-07-31
  • 1970-01-01
相关资源
最近更新 更多