在列表的路线中找到所有边缘

3
[[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) etc.

我已经尝试了下面的代码,但它只给我一个列表,而不是单独的路线。

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

2
预期结果是什么?或者你如何计算距离? - kederrac
请定义“边缘”。您是指每个列表中的连续位置吗? - Pynchia
@kederrac 预期结果是一条路线的公里数总和。我使用距离矩阵计算距离。 - Antoine Van Esch
@Pynchia 是的,边缘是每个列表中连续的位置。 - Antoine Van Esch
对于(0,100),距离是多少?100-0=100?你想要对子列表中的所有距离求和吗? - kederrac
@kederrac,0和100是城市编号,我有一个带有y(城市编号)和x(城市编号)的矩阵,所以通过在矩阵中寻找从0到100的距离来得到答案。 - Antoine Van Esch
2个回答

3

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

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

输出:

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

2

对于每个路径(子列表),您可以使用 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), ...]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接