我有一个列表,其中包含无向加权图的所有边。我进一步按其边权重的递增顺序对其进行排序。
列表如下
lis = [['B', 'C', 1], ['C', 'B', 1], ['B', 'A', 2], ['C', 'A', 2], ['A', 'C', 2], ['A', 'B', 2], ['D', 'C', 3], ['C', 'D', 3], ['B', 'D', 5], ['D', 'B', 5]]
现在在列表中,['B', 'C', 1], ['C', 'B', 1]
表示同样的事情。这是边BC
的权重为1,边CB
的权重为1.同样,我们有边{列表中有{1}},AB
等。
我如何只保留两个边缘中的一个而不是两个边缘,因为它们都意味着相同的东西。所以对于BA
,我只想说['B', 'C', 1], ['C', 'B', 1]
。我该怎么做?
我发现了一个类似的问题,但我不确定如何在我的情况下实现它。 Removing duplicate edges from graph in Python list
我尝试实施链接中发布的解决方案,但我没有工作
['B', 'C', 1]
答案 0 :(得分:0)
只需对每个项目进行排序并删除重复项:
>>> lis = sorted([sorted(item) for item in lis])
>>> [lis[i][::-1] for i in range(len(lis)) if i == 0 or lis[i] != lis[i-1]]
[['C', 'B', 1], ['B', 'A', 2], ['C', 'A', 2], ['D', 'C', 3], ['D', 'B', 5]]