在列表中查找列表路径中的所有边

Find all edges in a route of list in lists

[[0, 100, 7, 27, 34, 40, 41, 48, 58, 65, 75, 78, 79, 96, 126, 127, 0],
 [0, 2, 45, 54, 56, 57, 59, 66, 67, 82, 86, 102, 124, 133, 0],
 [0, 35, 39, 52, 53, 60, 61, 80, 81, 83, 87, 97, 98, 101, 109, 0],
 [0, 15, 28, 29, 30, 31, 32, 33, 37, 38, 49, 50, 51, 71, 95, 0],
 [0, 3, 16, 22, 23, 44, 72, 73, 74, 90, 110, 131, 0],
 [0, 10, 11, 18, 19, 36, 55, 89, 93, 94, 108, 113, 114, 0],
 [0, 1, 5, 6, 9, 12, 17, 24, 43, 64, 77, 85, 88, 91, 92, 111, 112, 130, 0],
 [0, 13, 20, 42, 62, 68, 84, 99, 104, 116, 119, 125, 128, 129, 132, 0],
 [0, 8, 14, 26, 63, 69, 70, 103, 105, 123, 0],
 [0, 4, 21, 25, 46, 47, 106, 107, 115, 117, 118, 120, 121, 122, 0],
 [0, 76, 0]]

我有这个列表列表,每个数字都是路线中的一个位置。现在我必须计算每条路线的边缘之间的距离。

[(0,100),(100,7),....(127,0)],[(0,2),(2,45) 等

我已经尝试了下面的代码,但它给了我一个列表,但没有给出单独的路线。

    for a in range(len(result)):
       for (i,j) in list(zip(result[a], result[a][1:])):
          print((i,j))

对于每个路径(子列表),您可以使用 zip 来配对元素

edges = []
for path in result:
    edges_path = []
    for pair in zip(path, path[1:]):
        edges_path.append(pair)
    edges.append(edges_path)

使用列表理解

edges = [list(zip(path, path[1:])) for path in result]

给出:[[(0, 100), (100, 7), (7, 27), ..., (126, 127), (127, 0)], [(0, 2), (2, 45), ...]

如果您想从子列表中获取每 2 个连续数字的元组,您可以使用内置函数的列表推导式 zip:

[list(zip(l, l[1:])) for l in result]

输出:

[(0,100),(100,7),....(127,0)],[(0,2),(2,45) etc.