繁体   English   中英

按连续数字对由两个数字组成的元组列表进行排序

[英]Sorting a list of tuples made up of two numbers by consecutive numbers

元组列表是来自有能力的车辆路线优化的 output,表示从一个站点到另一个站点的弧线,其中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)]

Output:

[(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有一个很好解决这类问题的package- networkx 学习一些基本的图形算法是个好主意。 还有一个关于这个算法的堆栈溢出问题,你可以参考Finding all cycles in a directed graph

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM