【问题标题】:Sorting a list of tuples made up of two numbers by consecutive numbers按连续数字对由两个数字组成的元组列表进行排序
【发布时间】:2020-08-19 22:50:17
【问题描述】:

元组列表是容量化车辆路线优化的输出,表示从一个站点到另一个站点的弧线,其中0 表示车辆的站点(车辆的起点和终点)。由于车辆必须行驶几圈,它可能会在所有停车前返回站点。求解器将始终首先返回起始弧,这在下面的示例中意味着以0 开头的第一个连续元组,即(0, 3), (0, 7), (0, 8) 将确定有多少圈(= 3)。

如何按连续顺序对弧进行排序,以便一辆车可以一个接一个地驱动弧?

输入:

li = [(0, 3), (0, 7), (0, 8), (3, 0), (4, 0), (7, 3), (8, 4), (3, 0)]

输出:

[(0, 3), (3, 0), (0, 7), (7, 3), (3, 0), (0, 8), (8, 4), (4, 0)]

到目前为止我尝试了什么:

    laps = 0
    for arc in li:
        if arc[0] == 0:
            laps = laps + 1
    new_list = []
    for i in range(laps):
        value = li.pop(0)
        new_list.append([value])
    for i in range(laps):
        while new_list[i][-1][1] != 0:
            arc_end = new_list[i][-1][1]
            for j in range(len(li)):
                if li[j][0] == arc_end:
                    value = li.pop(j)
                    new_list[i].append(value)
                    break
    flat_list = [item for sublist in new_list for item in sublist]
    return flat_list

【问题讨论】:

  • 到目前为止你尝试了什么?

标签: python list sorting tuples vehicle-routing


【解决方案1】:

您正在尝试解决在有向图中查找循环的问题。这个问题本身并不难解决,Python 有一个非常好的包来解决这类问题——networkx。学习一些基本的图算法是个好主意。还有一个关于这个算法的栈溢出问题,大家可以咨询Finding all cycles in a directed graph

【讨论】:

    猜你喜欢
    • 2016-03-04
    • 2017-05-04
    • 2019-06-28
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    相关资源
    最近更新 更多