Python 3.x Python中连接坐标的排序列表

Python 3.x Python中连接坐标的排序列表,python-3.x,Python 3.x,我有一个连接坐标的元组列表(连接的元组数可以是任意的): 如何对该列表进行排序,以便删除所有重复项,并获得以下信息: [((0, 0), (0, 3)), ((1, 3), (1, 5))] 第一连通坐标: (0, 0), (0, 1) (0, 1), (0, 2) (0, 2), (0, 3) (1, 3), (1, 4) (1, 4), (1, 5) 转向: (0, 0), (0, 3) (1, 3), (1, 5) 第二连通坐标: (0, 0), (0, 1) (0, 1), (

我有一个连接坐标的元组列表(连接的元组数可以是任意的):

如何对该列表进行排序,以便删除所有重复项,并获得以下信息:

[((0, 0), (0, 3)), ((1, 3), (1, 5))]
第一连通坐标:

(0, 0), (0, 1)
(0, 1), (0, 2)
(0, 2), (0, 3)
(1, 3), (1, 4)
(1, 4), (1, 5)
转向:

(0, 0), (0, 3)
(1, 3), (1, 5)
第二连通坐标:

(0, 0), (0, 1)
(0, 1), (0, 2)
(0, 2), (0, 3)
(1, 3), (1, 4)
(1, 4), (1, 5)
转向:

(0, 0), (0, 3)
(1, 3), (1, 5)
我曾想列举一下清单:

for index, item in enumerate(coordinates):
    if item[index] == item[index + 1]:
         ...
但通常甚至不知道如何解决这个问题。

算法:

  • 从空列表开始
  • 在其中添加一个空列表
迭代元组:

  • 如果结果列表中的最后一个列表为空,请将当前元组的所有元素添加到该列表中
  • 如果结果列表最后一个列表中的最后一个元素与当前元组第一个元素相同:
    • 将当前元组的最后一个元素添加到其中
    • 或将其最后一个元素替换为当前项最后一个元素
  • 如果没有,则向结果列表添加一个新的空列表,并向其中添加当前元组的所有元素
  • 继续迭代直到完成
如果您选择上述任一选项:

完成后,优化结果:并将每个内部列表的第一个和最后一个元素添加到新列表中,然后将该列表添加到最终结果列表中

代码:

输出:

[[(0, 0), (0, 1), (0, 2), (0, 3)], [(1, 3), (1, 4), (1, 5)]]    
[((0, 0), (0, 3)), ((1, 3), (1, 5))]
如果在继续条纹时替换内部列表的最后一个元素,则可以避免最后的细化步骤,但会失去在第一个结果列表中查看整个连接的能力